




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
DSP原理與應用實驗一集成開發環境CCS應用根底程序分析三個文件的作用及接口情況,說明各個文件中偽指令的作用。答:test1.asm文件的作用是匯編主程序,vectors.asm文件是中斷矢量處理程序,test1d文件是命令文件。test1.asm中偽指令的作用:.title作用是在每頁的頂部打印文件標題.mmregs為存儲器映像存放器定義符號名。使用.mmregs的功能和對所有的存儲器映像存放器執行set偽指令相同。.usect匯編命令建立的自定義段也是未初始化段.def定義全局變量.text已初始化段.end終止匯編,位于程序源程序的最后一行。vectors.asm中偽指令的作用:.ref定義全局變量.sect匯編器偽指令建立的自定義段也是已初始化段.space對存儲器進行初始化。分析主程序的結構和功能,對每條指令進行注釋,寫出執行結果。 .title "example1.asm" .mmregs ;使能存儲器映像存放器 stack .usect "STACK",10h .def_c_int00 ; .text_c_int00: stm #stack+10h,SP ;設置堆棧指針 stm #0x0000,SWWSR ;所有存儲器未加軟件延遲 ;================================================ stm #0x70,AR2 st #0xff80,*AR2 ;================================================ ;觀察控制位SXM的作用 ;當SXM=0時,進行無符號數的加載 rsbx SXM;SXM置零 nop ld *AR2,A ;(A)=(000000FF80 H) ; ;當SXM=1時,進行有符號數的加載 ssbx SXM;SXM置1 nop ld *AR2,A ;(A)=(FFFFFFFF80H) ;================================================ ;================================================ ;觀察控制位OVM的作用 ;當OVM=0時,對溢出不進行處理 rsbx OVM ld #0x7fff,16,B;立即數左移16位給B add #0x7fff,16,B ;(B)=(00FFFE0000H) ; ;當OVM=1時,對溢出進行處理 ssbx OVM ld #0x7fff,16,B add #0x7fff,16,B ;(B)=(007FFFFFFFH) ;================================================ ;================================================ ;觀察控制位C16的作用 ;當C16=0時,進行32位雙精度數加法運算 ssbx OVM ld #0x0001,16,A add #0x7fff,A dst A,*AR2 ld #0x0001,16,A or #0xffff,A;相“或〞 rsbx C16 nop dadd *AR2,A,B ;(B)=(0000037FFEH) ; ;當C16=1時,進行兩個獨立的16位數加法運算 ssbx C16 nop dadd *AR2,A,B ;(B)=(0000027FFEH) ;================================================ ;================================================ ;觀察控制位FRCT的作用 ;當FRCT=0時,對乘積不進行移位 ld #0x1234,16,A rsbx FRCT nop mpya *AR2 A中高16位與T相乘 ;(B)=(0000001234H) ; ;當FRCT=1時,對乘積左移1位 ssbx FRCT nop mpya *AR2 ;(B)=(0000002468H) ;================================================ ;================================================ ;觀察測試位TC bitf *AR2,#0x8000 ;(TC)=(0) nop nop ; bitf *AR2,#0x0001 ;(TC)=(1) nop nop ;================================================ ;================================================ ;觀察標志位C ssbx SXM ld #0x7fff,A ld #0x8000,B max A ;(C)=(0) nop nop ; min B ;(C)=(1) nop nop ;================================================ ;================================================ ;觀察標志位OVA,OVB ssbx SXM rsbx OVA ld #0x7fff,16,A add #0xffff,A ;(OVA)=(0) nop nop ; add #0x7fff,16,A ;(OVA)=(1) nop nop ;================================================dead_loop: nop nop nop nop b dead_loop .end寫出本工程的分段和存儲器的定位情況。表格如下:段名未/已初始化所屬PAGE起始地址存儲區長度STACK未初始化10x0080256字.bss未初始化10x006032字.text已初始化00xe000256字.data已初始化00xe000256字vectors已初始化00xff80128字調試說明總結上機調試步驟和調試情況,分析調試中遇到的問題是如何解決的。答復下列問題如果沒有在工程中添加test1d文件,試問匯編連接后能否產生test1.out文件?能否獲得正確的結果?答:如果沒有test1d這個命令文件,是不會產生test1.out文件的,不能獲得正確的結果。因為鏈接器是將.obj文件和d文件連接起來才生成的輸出文件,如果沒有命令文件,那么目標文件就不能正確地連接,就不會生成.out文件,更不會產生正確的結果。在主程序中存在著許多NOP指令,它們的作用是什么?如果將它們去掉,程序能否正常運行?答:NOP指令的作用是空操作,雖然不進行任何操作,但是給系統進行流水線操作提供了時間,也可以增加榮譽,防止程序跑飛。如果將它們去掉,程序不能正常運行。偽指令.ref和.def在本工程中的作用是什么?如果將它們去掉將會產生什么后果?答:.def定義全局變量和符號,.ref在本模塊內引用全局變量,假設去掉,會因為未定義變量而編譯出錯。.def作用是識別定義在當前模塊中、但可被其他模塊使用的符號;.ref的作用是識別在當前模塊中使用的但在其他模塊中定義的符號,匯編器會把該符號標記為沒有定義的外部符號,并將它送入到目標符號表中,以便鏈接器可以分辨它的定義。如果將它們去掉,將不會產生正確的結果。實驗二尋址方式程序分析分析主程序的結構和功能,對每條指令進行注釋,寫出該條指令的尋址方式和執行結果。 .mmregs stack .usect "STACK",20 .bssData_0,8 .bssData_1,8 .bssx,8 .datatable: .word11,12,13,14 .word8,6,4,2 .def_c_int00; .text_c_int00: stm #stack+20,SP stm #0x0000,SWWSR;********************************; 立即尋址;******************************** ld #4,DP ;指令代碼〔0000:E004:EA04〕 ld #0x7850,A ;指令代碼〔0000:E005:F020〕 rpt #4 add #0x100,4,A ;A=〔000000C850h〕;****************************************************************; 絕對尋址;1,dmad;2pmad;3,PA(PORTAddressing);4,*(lk)Addressing;**************************************************************** stl A,*(Data_0) ;第〔4〕種方式 stm #0x0066,AR2 stm #Data_1,AR3 mvkd AR2,*AR3 ;第〔1〕種方式 ld *(Data_1),B ;第〔4〕種方式 mvpd table,*AR2 ;第〔1〕種方式;****************************************************************; 累加器尋址;**************************************************************** rsbx sxm nop nop ld #table,A stm #Data_1,AR2 rpt #8-1 reada *AR2+;該段程序完成的功能是(將table中的數傳送到AR2);********************************; 直接尋址;********************************;基于DP的直接尋址 rsbx CPL;CPL置0,選定用DP的直接尋址 nop nop ld #Data_0,DP;第0頁 nop nop ld @Data_0,A ;源操作數的地址是(0060h) nop nop add @Data_1,A ;源操作數的地址是(0068h) nop nop nop;基于SP的直接尋址 ssbx CPL;CPL置1,選用SP直接尋址的指針 nop nop stm #Data_1,sp nop ld @0,A ;源操作數的地址是(0068h) nop nop add @2,A ;源操作數的地址是(006ah) nop nop add @3,A ;源操作數的地址是(006bh) nop nop;********************************; 堆棧尋址;******************************** stm #stack+20,SP stm #Data_1,AR1 RPT #7 PSHD *AR1+ ;執行后SP=〔008CH〕 stm #x,AR2 RPT #7 POPM *AR2+ ;執行后SP=〔0094H〕;****************************************; 間接尋址;**************************************** stm #Data_1,AR2 stm #x,AR3 sub A sub B stm #6-1,BK stm #Data_0,AR2 stm #Data_1,AR3 stm #3,AR0 stm #8-1,BRC rptb loop-1 add *AR2,A mac *AR2+0%,*AR3+,Bloop: stm #Data_1,AR3 mvmm AR3,AR2 mar *+AR3(3) ld *AR3,A ;源操作數的地址是(006BH) ld *+AR2(5),B ;源操作數的地址是(0072H);************************************************; 存儲器映像存放器尋址;************************************************ stm #Data_0,AR6 mvmm AR6,AR7 ldm AR6,A stlm A,AR2dead_loop: nop nop nop nop b dead_loop .end 寫出本工程的分段和存儲器的定位情況,填寫表2-1.段名已/未初始化段所屬PAGE起始地址存儲區長度STACK未初始化段10X00800X100.bss未初始化段10X00600X20.text已初始化段00XE0000x500.data已初始化段00XE0000x500vectors已初始化段00XFF800X80分析和總結各種尋址方式的特點。答:①立即尋址:指令中的操作數是一個立即數,用#表示。根據立即數長度分為使用短立即數的單字指令和使用長立即數的雙字指令。②絕對尋址:指令中包含著操作數的地址。使用時要注意A.絕對地址長度為16位,該指令至少為兩個字長,執行周期也相對較長;B.有些采用絕對尋址的指令不能與單循環指令RPT,RPTZ配合使用,如(lk)尋址。③累加器尋址:累加器尋址是指將累加器A中的內容〔低16位〕作為程勛存儲器的地址,完成程序控件和數據控件的數據訪問的一種方式。通過指令READA或WRITA實現。④直接尋址:直接尋址是指利用指令中的地址偏移量dma與數據頁指針DP或堆棧指針SP組合,找到數據空間中的一個16位地址的方式。它實際上是一種相對尋址方式,多為單字單周期指令。⑤間接尋址:間接尋址是指通過兩個輔助算術邏輯單元ARAU0、ARAU1及8個輔助存放器AR0~AR7,間接獲得數據存儲器地址的方式。在這種方式下,輔助存放器的內容就是數據空間操作數的地址,這些地址的產生是通過ARAU和相關硬件進行的。按照尋址目的又可將間接尋址方式分為但操作數尋址和雙操作數尋址。⑥存儲器映像存放器尋址:存儲器映像存放器尋址是一種直接訪問存儲器映像存放器MMR的方式,可以用來修改MMR的值。直接尋址時,不管SP或DP的值如何,都強制其高9位為0;在間接尋址時,僅使用輔助存放器中的低7位,而使用其高9位為0。此外,對數據空間0頁上的0060h~0070h也可以采用存儲器映像存放器尋址方式去訪問。⑦堆棧尋址:堆棧尋址用于進行數據或者MMR的入棧和出棧操作。C54x的堆棧是下拉式堆棧,入棧時地址值減小,出棧時地址值增加。堆棧指針是16位的存儲器映像存放器SP,它總是指向棧頂位置。DSP在調用或中斷響應時會自動將PC值送入堆棧保存。堆棧也可使用于數據的暫存或傳遞等。二、調試說明總結上機調試步驟和調試情況,分析調試中遇到的問題是如何解決的。三、答復下列問題〔1〕總結TMS320C54X的7種尋址方式的尋址空間情況,它們分別應用在什么場合?答:<1>立即尋址主要用于初始化,特點是指令中包含一個固定的立即數,因此沒有尋找數據地址的過程。在立即尋址方式指令中,應在數值或符號前面加一個“#〞,表示是一個立即數,以區別于地址。<2>絕對尋址利用16位地址尋址存儲單元,特點是指令中包含一個固定地址。16位地址可以用其地址標號或程序中定義的符號常數來表示。有dmad,pmad,PA,*(lk)四種方式。<3>累加器尋址是將累加器的內容作為地址去訪問程序存儲器單元,即將累加器中的數作為地址,用來對存放數據的程序存儲器尋址。有兩條指令可以采用累加器尋址,READASmem和WRITASmem,這兩條指令,在重復方式下執行,可以用來每次對累加器A的內容增加1。<4>直接尋址是利用數據指針和堆棧指針尋址,特點是數據存儲器地址由基地址〔數據頁指針DP和堆棧指針SP〕和廉價地址共同構成,共16位。基地址位于數據存儲器地址的高9位,偏移地址位于數據存儲器地址〔dmad〕的低7位。DP和SP都可以與dmad偏移結合產生實際的地址。<5>間接尋址是利用輔助存放器內容作為地址指針訪問存儲器。C54X有8個16位輔助存放器〔AR0-AR7〕.每一個存放器都可以用來尋址64千字數據荀小虎空間中任何一個單元。間接尋址的靈活性表達在:不僅能從存儲器中讀或寫一個單16位的數據操作數,而且能在一條指令中訪問兩個數據存儲器單元。有兩種特殊的間接尋址防護四:循環尋址和位倒序尋址方式。<6>存儲器映像存放器尋址〔MMR〕用于修改存儲器映像存放器的值,而不影響當前數據頁指針〔DP〕或堆棧指針〔SP〕的值。MMR尋址可以工作在直接和間接尋址方式下。<7>堆棧尋址用于發生終端或子程序調用時自動存放程序計數器〔PC〕中的值。堆棧也能用來保護現場或傳送參數。C54X的堆棧是從搞地質向低地址方向填入的。SP始終指向存放在堆棧中的最后一個元素。執行壓入堆棧操作時,先減小SP后再將數據壓入堆棧;而執行堆棧彈出操作時,那么是先從堆棧彈出數據,然后再增加SP的值。〔2〕直接尋址有兩種方式,它們是如何控制的?答:直接尋址有DP和SP兩種方式。當CPL=0時,以數據頁指針存放器DP的9位為高高位,以指令中的7位〔dmad〕為低位,共同構成16位數據存儲單元的地址。當CPL=1時,將堆棧指針SP的16位地址與指令中的7位地址相加,形成16位的數據存儲器地址。〔3〕寫出符號“#〞、“@〞、“*〞在指令〔尋址方式〕中所表示的含義。答:“#〞在立即尋址中表示立即數“@〞B表示直接尋址,后跟偏移量“*〞表示絕對尋址和間接尋址。〔4〕堆棧尋址的作用是什么?壓棧和彈出操作是如何實現的?答:堆棧尋址用于發生終端或子程序調用時自動存放程序計數器〔PC〕中的值。堆棧也能用來保護現場或傳送參數。C54X的堆棧是從搞地質向低地址方向填入的。SP始終指向存放在堆棧中的最后一個元素。執行壓入堆棧操作時,先減小SP后再將數據壓入堆棧;而執行堆棧彈出操作時,那么是先從堆棧彈出數據,然后再增加SP的值。〔5〕絕對地址尋址有哪幾種?它們可以訪問哪些地址空間?各有什么特點?答:絕對地址尋址有4種方式,分別是:數據存儲器地址〔dmad〕尋址,程序存儲器地址(pmad)尋址,端口(PA)尋址和*〔lk〕尋址。其中,dmad尋址用于確定操作數存于數據存儲單元的地址。Pmad尋址用于確定程序存儲器中的一個地址。PA尋址是用一個符號或一個數字來確定外部I/O端口的地址。*〔lk〕尋址是使用一個指定數據空間的地址來確定數據存儲器中的一個地址。實驗三定點定標運算一程序分析分析程序的結構和功能,對每條指令進行注釋,寫出執行結果。 .title "example41.asm" .mmregs ;enablememorymappedregistersstack .usect "STACK",10h ;setstacksection .bss x1,2 .bss y,2 .bss s1,2 .bss z,2table1: .word 35*32768/100 ;0.35的Q15定標 .word 9*32768/10 ;0.9的Q15定標 .word 0 .word0table2: .word 762*4096/100 ;7.62的Q12定標 .word 184*16384/100 ;1.84的Q14定標 .def_c_int00; .text_c_int00: stm #stack+10h,SP ; stm #0x00a8,PMST stm #0x0000,SWWSR SSBX FRCT ;求y=x1×x2=0.35×0.9=0.315 STM #x1,AR2 RPT #3 MVPD table1,*AR2+ STM #x1,AR4 STM #x1+1,AR5 MPY *AR4,*AR5,A STH A,y RSBX FRCT ;求z=s1×s2=7.62×1.84=14.0208 STM #s1,AR2 RPT #1 MVPD table2,*AR2+ STM #s1,AR4 STM #s1+1,AR5 MPY *AR4,*AR5,A DST A,z NOP NOP .end二、調試說明總結上機調試步驟和調試情況,說明調試中遇到的問題是如何解決的。三、總結定點數定標的方法,總結將十進制數轉換為Q定標的十六進制數的方法。答:假設將0.x寫成Qn定標,那么將定點數放大假設干倍〔設為N倍〕變成整數x,那么0.x的Qn定標值為:x*2^n/N。例如:0.35的Q15定標值2cccH0.9的Q15定標值7333H0.35*0.9的Q15定標值2851H7.62的Q12定標值79ebH1.84的Q14定標值75c2H7.62*1.84的Q26定標值3814H四、總結實現定點數乘法運算的方法。答:兩定點數相乘有三種情況:1、整數*整數:Q0*Q0,結果仍為純整數,小數點在結果的D0位后面。2、小數*小數:Q15*Q15=Q30,結果仍為純小數,小數點在乘積的D30為位后面,也就是說,D31和D30位都是符號位,且其值相同。另外,16位純小數乘積的精度已經到達2^-15,因此,對這種純小數乘法可將乘積左移一位,去掉多余的符號位,然后保存高16位結果,仍是Q15定標。C54X的硬件乘法器已提供了對乘積的處理功能,只需將標志位FRCT置1,硬件就可自動完成對乘積左移一位操作。3、混合小數乘法:Qi*Qj=Qi+j對16*16=32位數而言,式中:0<i<15,0<j<15,0<i+j<30.通常,相乘的兩個數種,假設一個數的整數位為M位,小數位為〔15-M〕位,另一個數的整數位為N位,小數位為〔15-N〕位,那么兩數相乘的積整數位為〔M+N〕位,小數位為〔15-M〕+〔15-N〕=30-M-N位。實驗五匯編程序的優化一程序分析〔1〕分析主程序中4個匯編程序內容的優化方法,對有關指令進行注釋,寫出各個程序段的執行結果。 .mmregs stack .usect "STACK",100h .bssa1,1 .bssa2,1 .bssb1,1 .bssb2,1 .bssc1,1 .bssc2,1 .bssep,1 .bssmp,1 .bssproduct,1 .bsstemp,1 .datatable: .word4*32768/10 ;0.4的Q15定標 .word-9*32768/10 ;-0.9的Q15定標 .def_c_int00; .text_c_int00: stm #stack+100h,SP stm #0x0000,SWWSR mvpd table,@a1 mvpd table+1,@a2 ld @a1,16,A exp A st T,@b1 norm A sth A,@c1 ld @a2,16,A exp A st T,@b2 norm A sth A,@c2 call multendd: b enddmult: ssbx frct ssbx sxm ld @b1,A add @b2,A stl A,@ep ld @c1,T mpy @c2,A exp A st T,@temp norm A sth A,@mp ld @temp,A add @ep,A stl A,@ep neg A stl A,@temp ld @temp,T ld @mp,16,A norm A sth A,@product nop ret nop .end〔2〕填寫表5-1~表5-4的內容,分析和總結各種優化方法的特點。表5-1針對內容1使用指令代碼長度〔字〕執行時間〔CPU時鐘周期〕CMPR2122SUB1210CMPS55比擬可知:相同的功能下,CMPS指令長度最短,執行時間最短,效率最高。表5-2針對內容2使用指令代碼長度〔字〕執行時間〔CPU時鐘周期〕BANZ17138BANZD18108比擬可知:BANZD雖然比BANZ的程序長度多出一個字長,但執行時間比后者節30個指令周期〔循環次數為16次〕,節省了大量時間,在屢次循環中效率更高。表5-3針對內容3使用指令代碼長度〔字〕執行時間〔CPU時鐘周期〕RPT727BANZ10125比擬可知:使用RPT比循環指令BANZ代碼字長更短,執行時間更短。表5-4針對內容4使用方法代碼長度〔字〕執行時間〔CPU時鐘周期〕雙操作尋址1355并行指令23151比擬可知:使用雙操作數代碼和執行時間都比并行指令短,效率更高。〔3〕寫出各個程序段的未初始化數據存儲器空間的分布情況。答:第一段程序使用的未初始化段為.usect段,分別是STACK和Y,由命令文件知,Y存放在0X0060的PAGE1里面,STACK存放在0X0010開始的,長度為0X100的PAGE1里面。第二、三、四段都使用的未初始化段為.bss段,存放在0X61開始到0X0260結束的空間里。實驗六C語言編程與優化1說明該工程中每個文件的作用。該工程中如果沒有“rts.lib〞文件,能否進行匯編、編譯和鏈接?答:不能。該工程中c-int00的作用是什么答:c-int00函數作用是初始化C環境,引導進入C程序。中斷矢量處理程序vectors.asm和c語言主程序是怎樣進行接口的?答:中斷處理程序開辟中斷矢量表的存儲空間,進行中斷入口地址的跳轉處理,特別是對復位入口地址的處理,在程序執行過程中起到了上電引導的作用,進入主程序_c_int00,然后進入C語言主程序。〔4〕當采用地址指針匯編時,如果將全局指針改為局部指針,為什么會提高程序的執行速度?答:使用局部指針時,編譯出的匯編指令使用RPT指令,RPT指令之后的被循環指令變為單字單周期,執行時間縮短。使用全局指針時,循環指令代碼字數周期數高,執行速度慢。〔5〕當不采用地址指針編程時,如果在for循環體中使用一個局部變量,為什么會提高程序的執行速度?答:使用局部變量時,局部變量數據的讀取是在進入函數和函數返回時處理的,無論分配的內存有多大都只需要一條指令,完全不需要額外的時間。使用全局變量,每次讀取數據都需要多條指令保護存放器和標志位,大大增加了程序執行所需的時間。〔6〕比擬采用地址指針編程和不采用地址指針編程,編譯后的匯編程序有什么區別?執行速度有無變化?答:采用地址指針編譯后的匯編程序是塊循環,不采用地址指針的那么沒有塊循環,執行速度加快。2總結上機調試步驟,調試情況,調試中遇到的問題是如何解決的?3填寫表6-1使用的優化選項代碼長度(字)執行時間(CPU時鐘周期)無27H376O024H362O11CH362O210H25O310H25實驗七混合編程實驗1說明該工程中每個文件的作用〔1〕頭文件“volumn.h〞的作用答:頭文件的作用是:存放一些全局標號,常量,變量,存放器名,位名等,作為共享文件使用,在引用文件中只需使用偽指令.copy或.include包含該頭文件即可,這樣就可到達簡化陳旭的目的。〔2〕寫出processing〔〕函數在調用匯編子程序load.asm時遵循了DSP混合編程的哪些約定?答:匯編程序和C語言程序一般都是在兩個不同的文件中,這樣,在不同文件中的變量或函數的應用,必須加以全局說明。在C程序中調用匯編子程序,那么必須在匯編文件中,用匯編問指令.global定義或.def將這個子程序聲明為全局的程序。load.asm被C調用時帶有一個參數〔argument〕.〔3〕如果要輸入一個方波信號,應該怎樣設計相應的數據文件〔.dat〕?答:應在.dat文件中寫入以下值:165110100x0050……0x0050;〔以上50個0x0050〕0xFFB0……0xFFB0;〔以上50個0xFFB0〕2總結上機調試步驟,調試情況,調試中遇到的問題是如何解決的。3.總結CCS所提供的探測點(ProbePoint)、圖表(Graph)、文件I/O(FileI/O)等調試工具的使用方法。答:探測點和文件:使用探測點probepoint將PC機上的數據文件sine.dat送往DSP目標程序作為測試數據,同時,使用斷點在到達探測點時自動更新所有翻開的窗口,這些窗口包括輸入/輸出數據的圖表等。使用方法如下:〔1〕雙擊Project工具欄上的RebulidAll圖標,重新生成程序。〔2〕執行主菜單“File〞中的“LoadProgram〞命令,選擇Volume.out并翻開。〔3〕在工程視圖中雙擊Volume.c以在右邊的編輯窗口中顯示源代碼。〔4〕將光標放在volume.c程序中的主函數dataIO〔〕那一行上。〔5〕在Project工具欄上雙擊“ProbePoint〞按鈕,添加ProbePoint。〔6〕執行主菜單命令“File〞中的“FileI/O〞,出現FileI/O對話框,如圖7-2所示。在對話框中選擇輸入/輸出文件。〔7〕單擊“FileInput〞欄,再單擊“AddFile〞按鈕。〔8〕選擇sine.dat文件,此文件與volume.c文件在同一目錄中。〔9〕單擊“Open〞按鈕,將文件添加到FileI/O列表中。此時將出現一個控制窗口。可以在運行程序時使用這個窗口來控制數據文件的開始、停止、前進、后退等操作。〔10〕在FileI/O對話框中的Address域填入inp_buffer,在Length域填入100,同時將WrapAround框選中。其中:Address域指示的是從文件中讀取的數據將要存放的地址。inp_buffer是在volume.c中定義的整型數組,其長度為BUFFSIZE。Length域指示的是每次到達ProbePoint時從數據文件中讀取多少個樣點。這里取為100是因為BUFFSZE=100,即每次取100個樣值存放在輸入緩沖中。如果Length超過100那么可能導致數據喪失。選中WrapAround說明讀取數據的循環特性,每次讀至文件結尾處將自動從文件頭開始重新讀取數據。這樣將從數據文件中讀取一個連續〔周期性〕的數據流。〔11〕單擊FileI/O對話框中的“AddProbepoint〞按鈕,將出現Break/Probe/ProfilePoints對話框,選中ProbePoints欄。〔12〕在ProbePoint列表中,高亮顯示寫有volume.cline61→NoConnection行,說明第61行已設置ProbePoint,但還沒有與PC文件相關聯。〔13〕在Connect域,單擊向下箭頭并從列表中選sine.dat。〔14〕單擊Replace按鈕,ProbePoint列表指示ProbePoint已經與sine.dat文件相關聯。〔15〕單擊“OK〞按鈕,FileI/O對話框指示文件連至一個ProbePoint。〔16〕單擊“OK〞按鈕,關閉FileI/O對話框。圖表:其功能是:將程序產生的數據畫圖顯示出來,包括時域/頻域波形顯示,星座圖、眼圖及圖像顯示。下面使用頻域/時域波形顯示功能,觀察一個時域波形。〔1〕執行主菜單“View〞中的命令“Graph〞,選擇“Time/Frequency〞,彈出GraphProperty對話框。〔2〕在GraphProperty對話框中,更改圖形的標題、起始地址、采集緩沖區的大小、顯示數據大小、DSP數據類型、自動伸縮屬性及最大Y值等。〔3〕單擊“OK〞按鈕,將出現一個顯示inp_buffer波形的圖形窗口。〔4〕在圖形窗口中單擊右鍵,從彈出菜單中選ClearDisplay,去除已有的顯示波形。〔5〕再次執行主菜單“View〞中的命令“Graph〞,選擇“Time/Frequency〞。〔6〕將GraphTitl地址欄改為Inputbuffer。其他設置不變。〔7〕單擊〞OK〞按鈕,出現一個顯示Inputbuffer波形的圖形窗口,同樣單擊右鍵從彈出菜單中選ClearDisplay,去除己有的顯示波形。實驗十定時器1.程序說明說明主程序的結構和功能,對每條指令進行注釋。 .file"timer.asm" ;.copy"vc5416_timer.inc" .mmregs .global _c_int00,main .def timer_iservTIM0 .set 0024HPRD0 .set 0025HTCR0 .set 0026HSWCR .set 0028HSWCR_VAL .set 01HTINT0_ENBL.set0008H ;開放TIMER0中斷,在中斷標志存放器IMR中(IMR=1)PLLX5 .set 043EFH ;(0100001111101111b,43EFH)外部時鐘16MHz,5倍頻到80MHz,PLLCOUNT=125OVLY_1 .set 00A0H ;PMST中(0000000010100000)IPTR=000000001,OVLY=1***********************************************************************************定時周期=1ms。分頻系數TDDR=9,主時鐘周期=1/80M=12.5ns*周期數PRD=1F3FH(7999);定時周期=12.5*(TDDR+1)*(PRD+1)=12.5*(9+1)*(7999+1)=1000ns=1ms**********************************************************************************TIM0_VAL .set 01F3FHPRD0_VAL .set 01F3FHTCR0_VAL .set 0E69H ;(111001101001)Free、soft=11,PSC=9,TRB=1,TSS=0,TDDR=9***********************************************************************************定時周期=1ms。分頻系數TDDR=9,主時鐘周期=1/80M=12.5ns*周期數PRD=1F3FH(7999);定時周期=12.5*(TDDR+1)*(PRD+1)=12.5*(9+1)*(7999+1)=1000ns=1ms*****************************************************************************************TIM0_VAL .set 03E7FH;主頻為32MHz時的定時周期設置1ms(主頻31.25ns)*PRD0_VAL .set 03E7FH *TCR0_VAL .set 00C61H ;(0000110001100001)TDDR=1,PSC=1stack_size.set 100 stack .usect".stack",stack_sizesys_stack .set stack+stack_size .bss XF_FLAG,1 .bssLED_DISP,1 .text_c_int00: BD main STM #sys_stack,SPmain: ANDM #0fffeh,*(SP) STM #OVLY_1,PMST ;設置OVLY=1,MP/MC=0,DROM=0等 STM #SWWSR_VAL,SWWSR ;插入三個等待周期 STM #SWCR_VAL,SWCR***************************************************************************************** ;倍頻、分頻切換 **************************************************************************************** STM #0,CLKMD DIV_STATU: LDM CLKMD,B AND #01H,B BC DIV_STATU,BNEQ ;CLKMD.0位為倍頻及分頻狀態位;0為DIV方式,1為PLL方式 STM #PLLX5,CLKMD ;已切換到DIV狀態PLL_STATU: LDM CLKMD,B AND #01H,B BC PLL_STATU,BEQ ;已切換到PLL狀態 ;setupandstarttimer STM #TINT0_ENBL,IMR ;STM #TINT0_ENBL,IFR ;中斷允許存放器中的TINT0位=1,清理未處理完的定時中斷。 STM #XF_FLAG,AR1 ST #0,*AR1 STM #03E8H,AR2 ;倒計中斷次數1000〔3E8H〕 ;STM #TIM0_VAL,TIM STM #PRD0_VAL,PRD STM #TCR0_VAL,TCR ;TSS=0,啟動定時器0 RSBX INTMWAIT: BD WAIT NOP NOP NOP* ;中斷效勞程序****************************************************************************************timer_iserv: BANZ EXIT_ISERV,*AR2- STM #03E8H,AR2 ;重載倒計中斷次數1000〔3E8H〕 BITF *AR1,#1H ;位測試XF_FLAG的最低位 BC XF_0,TC ;如果TC=1,說明XF_FLAGAND#1H=1,轉XF_0 SSBX XF ;XF置1 ST #01H,*AR1 ;將1裝入標志位XF_FLAG STM #LED_DISP,AR3 ST #0FFFFH,*AR3 PORTW *AR3,08002H ;訪問CPLD板上的八位LED B EXIT_ISERVXF_0: RSBX XF ;XF置0 ST #00H,*AR1 ;將0裝入標志位XF_FLAG STM #LED_DISP,AR3 ST #0H,*AR3 PORTW *AR3,08002HEXIT_ISERV: RETE .end 2.調試說明總結上機調試步驟和調試情況,說明調試中遇到的問題是如何解決的。3.分析和總結片內定時器的結構特點及編程中的要點,寫出片內定時器初始化的步驟。答:片內定時器主要由定時存放器〔TIM〕,周期存放器〔PRD〕,預分頻計數器〔PSC〕,預分頻系數〔TDDR〕及控制邏輯電路等組成。可以劃分為兩個主要模塊:主定時模塊和預分頻模塊。其中,主定時模塊包括TIM和PRD,它們是兩個可編程的16位存儲器映像存放器〔MMR〕,地址分別是0024h和0025h。Tim是一個減法計數器,它的計數初值由PRD進行裝載。預分頻模塊由PSC和TDDR組成,它們分別位于定時器控制存放器TCR的D9~D6,D3~D0位,該存放器也是一個可編程的16位存儲器映像存放器。定時器的編程中有3個關鍵點:怎樣計算計數初值,怎樣對定時器進行初始化和怎樣配置定時器的中斷。初始化步驟:(1)將TCR的TSS置1,關閉定時器(2)裝載PRD(3)初始化TDDR.將TRB置1去重新裝載定時器的初值,將TSS清0以使能定時器.實驗十一數字I/O口的應用1說明程序的結構和功能,對每條指令進行注釋。 .file "vc5416_traffic.asm" .mmregs .global _c_int00,main .def timer_iservTIM0 .set 0024HPRD0 .set 0025HTCR0 .set 0026HSWCR .set 0028HSWCR_VAL .set 01HTINT0_ENBL.set0008H ;開放TIMER0中斷,在中斷標志存放器IMR中PLLX5 .set 043EFH ;(0100001111101111b,43EFH)外部時鐘16MHz,5倍頻到80MHz,PLLCOUNT=125OVLY_1 .set 00A0H ;PMST中(0000000010100000)IPTR=000000001,OVLY=1*****************************************************************************************定時周期=1ms。分頻系數TDDR=9,主時鐘周期=1/80M=12.5ns*周期數PRD=1F3FH(7999);定時周期=12.5*(TDDR+1)*(PRD+1)=12.5*(9+1)*(7999+1)=1000ns=1ms****************************************************************************************TIM0_VAL .set 01F3FHPRD0_VAL .set 01F3FHTCR0_VAL .set 0E69H ;(111001101001)soft、Free=11,PSC=9,TRB=1,TSS=0,TDDR=9IMR_VAL .set 0008H TRAF_ADDR .set 08000HSN_GREEN .set 030CH ;001100001100b ;南北綠、東西紅;EW_RED .set 0104H ;000100000100bEW_YELLOW .set 0082H ;000010000010bDELAY4S .set 0FA0H ;4SDELAY1MS .set 022F0H;1S數的開方stack_size.set 100 stack .usect".stack",stack_sizesys_stack .set stack+stack_size .bss LED_DISP,1 .bss LED_FLAG,1 .bssLED_GREEN,1 .bss LED_RED,1 .bss LED_YELLOW,1 .bss DEL_1,1 ;放入循環(8944d(22F0h))次 .bss DEL_2,1 ;放入循環(8944d(22F0h))次 .text_c_int00: BD main STM #sys_stack,SP********************************************************************** *程序開始********************************************************************** main: ANDM #0FFFEH,*(SP) ;SP定位在偶地址 STM #OVLY_1,PMST ;片內RAM同時映射到程序空間和數據空間,0080H~3FFFH定義為內部DARAM STM #SWWSR_VAL,SWWSR;三個空間都插入三個等待周期數 STM #SWCR_VAL,SWCR ;X2********************************************************************** *切換主頻為PLL〔倍頻〕方式,主頻設置為80MHz********************************************************************** STM #0,CLKMD ;切換到DIV模式DIV_STATU: LDM CLKMD,B ;測試最低位。"0"標志為DIV模式,"1"標志為PLL模式 AND #01H,B BC DIV_STATU,BNEQ ;B不等于0時,循環等待 STM #PLLX5,CLKMDPLL_STATU: LDM CLKMD,B AND #01H,B BC PLL_STATU,BEQ ;B等于0時跳轉時,循環等待********************************************************************** *設置定時器參數〔1ms〕********************************************************************** RSBX INTM ;中斷使能 STM #IMR_VAL,IMR ;開放TINT0中斷 STM #TIM0_VAL,TIM0 ;1毫秒 STM #PRD0_VAL,PRD0 STM #TCR0_VAL,TCR0;啟動定時器********************************************************************** *紅綠燈顯示初始化,起始狀態為"0"〔熄滅〕********************************************************************** STM #LED_FLAG,AR3 ;LED顯示標志 ST #0,*AR3 STM #LED_DISP,AR1 ;所有LED清零 ST #0H,*AR1 PORTW *AR1,TRAF_ADDR********************************************************************** *設置定時器中斷次數及黃燈延時參數1s********************************************************************** STM #DELAY4S,AR5 ;定時器延時4秒〔4X1000ms〕 STM #DEL_1
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 講好普通話寫好規范字
- 25年公司項目負責人安全培訓考試試題含答案(B卷)
- 礦山機械企業ESG實踐與創新戰略研究報告
- 再生銻企業數字化轉型與智慧升級戰略研究報告
- 地電阻率觀測儀器企業ESG實踐與創新戰略研究報告
- 研磨、篩選機械企業ESG實踐與創新戰略研究報告
- 自動熱電開關企業數字化轉型與智慧升級戰略研究報告
- 稀土鉛合金企業數字化轉型與智慧升級戰略研究報告
- 生物酶等發酵制品企業數字化轉型與智慧升級戰略研究報告
- 徑向柱塞泵企業ESG實踐與創新戰略研究報告
- 九年級英語單詞表上冊譯林版
- 公路工程施工安全生產風險管控清單
- 心理健康 開學第一課班會課件
- 人教版八年級下冊英語知識點總結
- 2025年河南輕工職業學院高職單招高職單招英語2016-2024歷年頻考點試題含答案解析
- 2025年華亭煤業集團有限責任公司招聘筆試參考題庫含答案解析
- 酒店賓館消防安全操作規程(3篇)
- AQT3034化工過程安全管理導則
- 《居家養老服務規范》
- 應急物資倉庫管理制度(4篇)
- 西安老城根Gpark策略課件0816
評論
0/150
提交評論