版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、目 錄實(shí)驗(yàn)一 CCS基本使用和DSP匯編編程基礎(chǔ)一、 預(yù)習(xí)內(nèi)容復(fù)習(xí)匯編語(yǔ)言指令內(nèi)容,匯編語(yǔ)言使用中的基本概念,CCS的基本概念。二、實(shí)驗(yàn)?zāi)康?. 掌握一個(gè)DSP軟件開(kāi)發(fā)流程。2. 理解DSP的啟動(dòng)過(guò)程。3. 掌握匯編的書(shū)寫(xiě)規(guī)范,學(xué)會(huì)匯編指令的運(yùn)用。4. 掌握編譯器和連接器的使用,能夠合理地分配存儲(chǔ)空間。5. 學(xué)習(xí)CCS的各種調(diào)試技巧,如:CUP寄存器、數(shù)據(jù)和程序存儲(chǔ)器的觀察,斷點(diǎn)的設(shè)置,反匯編窗口的使用。6. 學(xué)習(xí)定點(diǎn)數(shù)的運(yùn)算方法。三、實(shí)驗(yàn)要求1. 用.set定義四個(gè)立即數(shù)。2. 在.bss段建立幾個(gè)存儲(chǔ)空間。3. 把立即數(shù)相加和相乘,結(jié)果放在.bss分配的存儲(chǔ)空間。4. 合理分配各個(gè)段的存儲(chǔ)
2、地址,并使用CCS觀察。四、實(shí)驗(yàn)原理1. 軟件開(kāi)發(fā)流程 從大的步驟來(lái)講,一個(gè)軟件要能夠在DSP上面正常運(yùn)行,需要用戶完成以圖1-1所示的流程。 第一步:在用戶的工程里面,必須包含至少兩個(gè)文件。一個(gè)是程序指令的源文件,這個(gè)文件可以是匯編編寫(xiě)的,也可以是C語(yǔ)言編寫(xiě)的。當(dāng)然,這樣的文件在一個(gè)工程當(dāng)中可以用多個(gè),而且,編程的語(yǔ)言可以不統(tǒng)一。工程當(dāng)中必須包含的第二個(gè)文件是連接文件。這個(gè)文件的作用是把源文件中定義的各個(gè)段放到用戶指定的DSP的程序存儲(chǔ)區(qū),從而可以在該區(qū)域按一定順序執(zhí)行。 第二步:兩個(gè)文件編輯完成以后,可以調(diào)用編譯、匯編和連接命令。編譯功能把C源文件轉(zhuǎn)化為匯編文件,期間的轉(zhuǎn)化有一定的規(guī)則,這
3、些規(guī)則是在書(shū)寫(xiě)C語(yǔ)言語(yǔ)句是應(yīng)該注意的東西。匯編的功能是把編譯形成的匯編文件或者是用戶自己編輯的匯編文件轉(zhuǎn)化為COFF格式文件。而最后通過(guò)連接命令,結(jié)合連接文件,把COFF文件連接成為可執(zhí)行的COFF文件,即后綴名為.OUT的文件。第三步:通過(guò)CCS的加載功能,把.OUT文件加載到DSP內(nèi)部,其地址由連接文件規(guī)定。如果成功,可以在CCS中運(yùn)行該文件,并相應(yīng)進(jìn)行調(diào)試。圖1-1 開(kāi)發(fā)流程圖2.匯編源文件書(shū)寫(xiě)在CCS中,新建一個(gè)文件,在這個(gè)文件中,如果使用匯編語(yǔ)言,那就命名時(shí)使用ASM的后綴名,如果使用C語(yǔ)言,那命名時(shí)就使用C的后綴名。同時(shí)應(yīng)該把文件加載到相應(yīng)的工程當(dāng)中去。對(duì)于使用匯編的源文件,他有一
4、定的語(yǔ)法規(guī)范。包括語(yǔ)法格式,標(biāo)號(hào)的表示,立即數(shù)的表示,段的定義和宏定義。TMS320C54x Assembly Language Tools Users Guide和TMS320C54x DSP Reference Set-Volume 2: Mnemonic Instruction Set是掌握匯編語(yǔ)言書(shū)寫(xiě)方法的兩本手冊(cè)。 3.啟動(dòng)方式DSP有多種啟動(dòng)方式。但是,由于我們采用通過(guò)CCS從JTAG直接加載的方式,對(duì)于其他的加載過(guò)程可以不必考慮。但是,MP/MC方式,對(duì)于啟動(dòng)卻有一定影響。這里,有兩個(gè)問(wèn)題要注意。一是系統(tǒng)復(fù)位后,MP/MC寄存器的值究竟是多少。二是MP、MC方式(DSP是由MP/
5、MC引腳來(lái)決定是訪問(wèn)內(nèi)部程序存儲(chǔ)器還是外部程序存儲(chǔ)器,MP/MC=1訪問(wèn)外部程序存儲(chǔ)器空間,MP/MC=0訪問(wèn)內(nèi)部程序存儲(chǔ)器空間)對(duì)應(yīng)的DSP片內(nèi)存儲(chǔ)器分配關(guān)系如何。通過(guò)硬件跳線,可以設(shè)置啟動(dòng)方式,通過(guò)連接文件,可以把程序代碼放到指定的位置。4CCS的調(diào)試工具在本次實(shí)驗(yàn)中,CCS的調(diào)試工具將要使用到一些基本的操作。主要包括如何觀察CPU的各個(gè)寄存器,如何觀察數(shù)據(jù)區(qū)和程序區(qū)的數(shù)據(jù);單步執(zhí)行的方法和斷點(diǎn)執(zhí)行。五、實(shí)驗(yàn)步驟1. 雙擊桌面的CCS5000圖標(biāo),進(jìn)入CCS。如果遇到問(wèn)題,檢查硬件線路是否連接正確,電源是否打開(kāi),CCS SETUP是否合理。當(dāng)然,也有可能是PC機(jī)內(nèi)的ISA插卡接觸不好。2.
6、 新建一個(gè)工程。執(zhí)行Project菜單下的New,選擇一個(gè)合適的位置,存放這個(gè)新建的工程,最好是自己建立的目錄,便于管理。工程的名稱(chēng)以字母開(kāi)頭,其他沒(méi)有要求,不需要加后綴名,如:sy1。3. 新建一個(gè)文件作為匯編源文件。執(zhí)行File菜單下的New/Sourse File命令,接著就可以在編輯框里,按照匯編語(yǔ)言的規(guī)范,編輯相應(yīng)的指令代碼。指令完成以后,執(zhí)行File/Save as命令,給匯編文件取一個(gè)合適的文件名,保存在同工程相同的目錄下。保存時(shí),不需要加后綴名,但是,要選擇文件的類(lèi)型為Assembly Source File(.asm)。4. 編輯匯編源文件,完成以后,需要把這個(gè)文件加入到相應(yīng)
7、的工程中去。在左邊的工程管理窗口里,鼠標(biāo)移到工程文件名上面,單擊右鍵,選擇Add File。尋找到剛才編輯的匯編源文件,選擇確認(rèn)。之后可以在工程管理器中觀察到,Source文件夾中,出現(xiàn)了剛才的匯編文件。5. 匯編文件的代碼如下:.global _c_int00 VAL1 .set 012h ; 18VAL2 .set 034h ; 52 .bss temp,1 ; address of 0x080 .bss temp1,1 ; address of 0x081 .bss temp2,1 ; address of 0x082;result register .bss add_result,1
8、; address of 0x088 .bss mpy_i_h,1 ; address of 0x08a .bss mpy_i_l,1 ; address of 0x08b .text _c_int00: ld #temp,DP ; load DP of temp1 st #VAL1,temp1 st #VAL2,temp2 ; init temp1 & temp2 ,18+52=70(0x46);- test ADD - ld temp1,a ; load temp1 - a add temp2,a ; a+temp2 - a stl a,add_result ; save a(low 16
9、 bits) - add_result nop ; set breakpoint st #VAL1,temp1 st #VAL2,temp2 ; init temp1 & temp2,18*52=936(0x3a8);- test MPY (integer) - rsbx FRCT ; prepare for integer mpy ld temp1,T ; temp1 - T mpy temp2,a ; temp1*temp2 - A (result is 32 bit) sth a,mpy_i_h ; the high 16bit in mpy_i_h stl a,mpy_i_l ; th
10、e low 16bit in mpy_i_l nop ; set breakpointend: b end .end使用.set定義立即數(shù)的值;使用.bss分配一定存儲(chǔ)空間;在.text段編寫(xiě)指令,主要有:ld、st、add、mpy、stl、sth等等。6. 根據(jù)MP/MC的值,理解DSP存儲(chǔ)器地址分配,編輯好連接文件。連接文件的編輯方法同匯編源文件是一樣的,也是建立、編輯、存盤(pán)、命名、添加入工程。不同在于文件的內(nèi)容和文件的后綴名不同。連接文件的后綴名文.cmd,選擇存盤(pán)類(lèi)型的時(shí)候要注意。文件的內(nèi)容如下: MEMORY PAGE 0: IPROG: origin = 0x2000, len =
11、 0x1000 PAGE 1: IDATA: origin = 0x80, len = 0x1000 SECTIONS .text: IPROG PAGE 0 .bss: IDATA PAGE 1 7. 連接文件本來(lái)可以設(shè)置許多的參數(shù),但是,這些參數(shù)也可以在Project/Options中設(shè)置。在這個(gè)窗口中,可以對(duì)編譯、匯編和連接的過(guò)程設(shè)置參數(shù),各個(gè)參數(shù)的意思查閱相關(guān)的手冊(cè)。通常,使用默認(rèn)參數(shù)就可以了。參數(shù)設(shè)置完成后,就可以執(zhí)行Debug/build命令。這個(gè)命令將依次執(zhí)行編譯、匯編、連接的三個(gè)過(guò)程,任何一個(gè)過(guò)程中出現(xiàn)錯(cuò)誤,都會(huì)在熒幕下方的窗口中顯示出來(lái)。對(duì)于錯(cuò)誤,要認(rèn)真閱讀提示信息,從而知道
12、錯(cuò)誤出現(xiàn)的位置,并進(jìn)行相應(yīng)的改正。8. 如果Build的過(guò)程沒(méi)有錯(cuò),將會(huì)在工程所在目下出現(xiàn)一個(gè)后綴名為.out的文件,這個(gè)文件文件名是在Project/Options中設(shè)置產(chǎn)生的。目標(biāo)板采用MC方式,load剛生成的.out文件,如果提示錯(cuò)誤,檢查跳線設(shè)置。9. 加載成功,光標(biāo)出現(xiàn)在程序起始位置,呈黃色。這時(shí),在需要設(shè)置斷點(diǎn)的地方設(shè)置斷點(diǎn)。打開(kāi)View里面的CPU Register,在新出現(xiàn)的窗口里,可以觀察DSP CPU寄存器的各個(gè)數(shù)據(jù)。同樣,可以打開(kāi)View/Memery,選擇.data代碼段所在的位置,開(kāi)始地址為0X80,位于data頁(yè),在新窗口中,可以觀察該地址開(kāi)始的數(shù)據(jù)存儲(chǔ)區(qū)的各個(gè)數(shù)
13、據(jù)。10. 執(zhí)行Debug/Run命令,程序開(kāi)始運(yùn)行。到斷點(diǎn)處停止,加法的運(yùn)算完成。這時(shí),可以再次觀察CPU Register窗口,紅色數(shù)字代表數(shù)據(jù)有變換,注意PC指針的改變。數(shù)據(jù)窗口中,則注意用于存放運(yùn)算結(jié)果的地址單元的值的變化。11. 繼續(xù)執(zhí)行Run命令,觀察乘法的運(yùn)算結(jié)果。12. 執(zhí)行Debug中Reset Dsp和Restart命令,光標(biāo)從新回到程序入口。執(zhí)行Debug/StepInto,單步運(yùn)行程序,再次觀察結(jié)果。六、實(shí)驗(yàn)報(bào)告要求 給出數(shù)據(jù)空間的定義數(shù)據(jù)大小和存儲(chǔ)位置,記錄各個(gè)計(jì)算結(jié)果變化前后的內(nèi)容,給出連接文件和匯編程序。實(shí)驗(yàn)二 C和ASSEMBLY的混合編程一、預(yù)習(xí)內(nèi)容 C語(yǔ)言的
14、基本指令和編程方法,DSP中斷矢量表的內(nèi)容和中斷的執(zhí)行過(guò)程的知識(shí)。二、實(shí)驗(yàn)?zāi)康?. 掌握C語(yǔ)言編寫(xiě)源文件的方法。2. 掌握中斷矢量表的使用,理解BOOT LOADER的過(guò)程。3. 掌握定時(shí)器中斷的使用方法。4. 學(xué)習(xí)C和ASSEMBLY的混合編程。5. 學(xué)習(xí)CCS中圖形觀察動(dòng)態(tài)數(shù)據(jù)的方式。6. 學(xué)習(xí)用定時(shí)器實(shí)現(xiàn)數(shù)字振蕩器的算法。三、實(shí)驗(yàn)要求1. 設(shè)計(jì)一個(gè)數(shù)字振蕩器的實(shí)現(xiàn)算法,產(chǎn)生一個(gè)2KHZ的正弦信號(hào)。2. 定時(shí)器設(shè)置為25S產(chǎn)生一次中斷(等效于采樣速率40K)。3. 使用匯編語(yǔ)言編輯一個(gè)中斷矢量表,而主程序和中斷服務(wù)程序使用C語(yǔ)言編寫(xiě)。4. 使用CCS圖形觀察功能,觀察輸出正弦信號(hào)。四、實(shí)驗(yàn)
15、原理 1、數(shù)字振蕩器原理 設(shè)傳遞函數(shù)為正弦序列,其Z變換為:其中,其中,即: 設(shè)初始條件為0,求出上式的反Z變換得: 這是一個(gè)二階差分方程,其單位沖擊相應(yīng)為 。利用單位沖擊函數(shù)性質(zhì)知道,僅當(dāng)?shù)臅r(shí)候,為1,其他情況都為0。當(dāng)輸入為單位沖擊時(shí),輸出就是我們需要的正弦序列。 可見(jiàn),后,可以用遞推的方法求。根據(jù)上面的說(shuō)明,設(shè)振蕩器頻率為2KHz,采樣頻頻率為40KHz,定時(shí)器每隔25S產(chǎn)生一次中斷,得到一個(gè)。遞歸的差分方程系數(shù)為:2.定時(shí)器使用 圖21 定時(shí)器組成框圖定時(shí)器是一個(gè)片內(nèi)遞減計(jì)數(shù)定時(shí)器,可以產(chǎn)生周期的CPU中斷,每個(gè)CPU時(shí)鐘周期,定時(shí)器的計(jì)數(shù)值減1。當(dāng)定時(shí)器計(jì)數(shù)器的值減到0時(shí),產(chǎn)生一個(gè)定
16、時(shí)器中斷TINT。上圖是定時(shí)器的組成框圖。5000系列DSP中,5402和5420有兩個(gè)定時(shí)器,其他型號(hào)DSP只有一個(gè)。用戶使用三個(gè)寄存器來(lái)控制定時(shí)器,他們是TIM,PRD,TCR。他們地址如下:地址寄存器名稱(chēng)0024hTIMTimer register0025hPRDTimer period register0026hTCRTimer control register 表2-1 定時(shí)器相關(guān)寄存器地址定時(shí)器啟動(dòng)時(shí),PRD的值裝入TIM作為初始值,然后在TIM中開(kāi)始減計(jì)數(shù)。TCR為16bit的寄存器,包含了定時(shí)器的控制和狀態(tài)比特。具體如下所示:圖22 TCR各位說(shuō)明具體含義參考相應(yīng)手冊(cè)。由于EV
17、M板的CPU時(shí)鐘是100MHz,(其中tc代表CPU時(shí)鐘),所以,我們?cè)O(shè)置PRD的值為2499h。定時(shí)器啟動(dòng)的過(guò)程主要有四個(gè)方面:1)設(shè)置PRD;2)打開(kāi)定時(shí)器中斷;3)TSS=1,停止定時(shí)器;4)設(shè)置TCR,包括TDDR,同時(shí)TSS=0,TRB=1,啟動(dòng)定時(shí)器。3.DSP中斷的使用在C54X中,用戶可以通過(guò)中斷屏蔽寄存器IMR來(lái)決定開(kāi)放或關(guān)閉一個(gè)中斷請(qǐng)求。圖23給出C5410的IMR寄存器各個(gè)比特定義。圖23 IMR的結(jié)構(gòu)其中,HPINT表示HPI接口中斷,INT3-INT0位外部引腳中斷,TXINT和TRINT位TDM串口中斷,BXINT0和BRINT0位BSP串口發(fā)送和接收中斷,TINT
18、位定時(shí)器0中斷。在中斷屏蔽寄存器中,比特為1便是允許CPU響應(yīng)對(duì)應(yīng)的中斷,0表示禁止。當(dāng)然要響應(yīng)中斷,ST1寄存器中的INTM還要為0,表示允許所有中斷。當(dāng)DSP相應(yīng)中斷時(shí),PC指針指向中斷向量表中對(duì)應(yīng)中斷的地址,進(jìn)入中斷服務(wù)程序。中斷向量表是C54X存放中斷服務(wù)程序的一段內(nèi)存區(qū)域,大小為80h。在中斷向量表中,每個(gè)中斷占4個(gè)字的空間,一般情況是將一條跳轉(zhuǎn)或者延時(shí)跳轉(zhuǎn)指令放在其中。中斷向量表的位置首先在連接文件中加以確定,用戶必須知道他在出現(xiàn)空間的起始地址,然后通過(guò)修改基地址來(lái)通知DSP,其基地址由PMST寄存器中的IPTR(157bits)決定。4.C和匯編語(yǔ)言混合編程前面提過(guò),在同一個(gè)工程
19、里面,可以同時(shí)存在C語(yǔ)言源文件和匯編語(yǔ)言源文件。C和匯編是編輯源文件的兩種基本語(yǔ)言,各自有自己的優(yōu)點(diǎn)和缺點(diǎn)。對(duì)于C語(yǔ)言,他的優(yōu)點(diǎn)在于編程方便,缺點(diǎn)則是效率不高;匯編語(yǔ)言的編程效率很高,但是使用起來(lái)又很不方便。通常,混合使用,利用各自的優(yōu)點(diǎn),避免缺點(diǎn)。主程序我們采用C語(yǔ)言,而關(guān)鍵代碼,特別是一些占用CPU較多的代碼,我們使用匯編語(yǔ)言來(lái)編輯。實(shí)驗(yàn)中,我們把中斷矢量表作為一個(gè)匯編語(yǔ)言代碼段,使用單獨(dú)的一個(gè)匯編文件來(lái)生成。這個(gè)匯編文件有自己的段的定義,通過(guò)連接文件,我們把它放在一個(gè)有確定開(kāi)始地址的程序段里,并記下這個(gè)地址。通常,中斷矢量表有一個(gè)基本格式,我們?cè)诰庉嬎臅r(shí)候,可以直接參照這個(gè)格式:他的長(zhǎng)
20、度為80h,每4條字長(zhǎng)的指令代表著一個(gè)中斷產(chǎn)生時(shí)需要執(zhí)行的動(dòng)作。中斷的順序是系統(tǒng)統(tǒng)一約定的。通常,對(duì)于不使用的中斷,我們用b _ret nop nop來(lái)處理。上面共三條指令,但是第一條是跳轉(zhuǎn)指令,是雙字指令,nop才是單字指令,所以,一共是4個(gè)字的指令長(zhǎng)度,滿足矢量表要求。對(duì)于需要使用的中斷,我們?cè)谶@里放置一個(gè)跳轉(zhuǎn)指令,轉(zhuǎn)移到中斷服務(wù)程序。在這個(gè)實(shí)驗(yàn)中,中斷矢量表使用匯編語(yǔ)言,中斷服務(wù)程序使用C語(yǔ)言。所以,中斷服務(wù)程序位于另一個(gè)C語(yǔ)言文件中。如何實(shí)現(xiàn)匯編語(yǔ)言文件調(diào)用C語(yǔ)言程序,是我們要解決的一個(gè)問(wèn)題。首先,我們?cè)贑語(yǔ)言文件中,建立一個(gè)中斷服務(wù)子程序,他同一般的C語(yǔ)言子程序有一點(diǎn)不同,就是他需要
21、在定義子程序時(shí),加上一個(gè)interrupt的說(shuō)明。如:void interrupt tint() y0 = aa*y1 + bb*y2;y2 = y1;y1 = y0; bufcon_buf=y0;con_buf+;if(con_buf = 128)con_buf=0; /* set breakpoint to show wave ! */在匯編文件中,我們則使用一個(gè)跳轉(zhuǎn)指令,把子程序的程序名作為一個(gè)標(biāo)號(hào),跳轉(zhuǎn)到這個(gè)標(biāo)號(hào),就是調(diào)用這個(gè)子程序。但是,有幾點(diǎn)要注意:一是匯編文件中的標(biāo)號(hào)是子程序名稱(chēng),他的前面還有加上一個(gè)下劃線;二是匯編中,這個(gè)標(biāo)號(hào)要聲明為全局標(biāo)號(hào);三是如果存在參數(shù)傳遞,而且參數(shù)只有
22、一個(gè),那參數(shù)將放在A寄存器中,有多個(gè)參數(shù)時(shí),過(guò)程比較復(fù)雜,在此不加闡述。C語(yǔ)言文件中,如果要使用匯編指令,方法比較簡(jiǎn)單。把要執(zhí)行的匯編語(yǔ)句加上引號(hào),加上括號(hào),再在整個(gè)前面加上asm,如:asm( nop );在C語(yǔ)言文件編譯為匯編語(yǔ)言文件的時(shí)候,上面的匯編語(yǔ)句會(huì)不加變換地在該位置生成。如果是C語(yǔ)言文件要轉(zhuǎn)移到匯編文件中的某個(gè)位置,方法如下。首先在匯編文件的目的指令處加上一個(gè)標(biāo)號(hào),并把標(biāo)號(hào)用下劃線開(kāi)頭,同時(shí)聲明為全局標(biāo)號(hào)。然后在C語(yǔ)言文件中,把這個(gè)標(biāo)號(hào)作為一個(gè)子函數(shù)直接調(diào)用就可以了,這時(shí),不需要加下劃線。5. CCS圖形觀察窗口圖形觀察窗口的作用是把數(shù)據(jù)區(qū)和程序區(qū)的某一塊連續(xù)存儲(chǔ)區(qū)域數(shù)據(jù),用笛卡
23、兒坐標(biāo)系的縱坐標(biāo)表示,橫坐標(biāo)則是地址的歸一化值。我們?cè)谑惯@些數(shù)據(jù)變換的程序代碼處設(shè)置斷點(diǎn),運(yùn)行程序使用動(dòng)畫(huà)執(zhí)行,那么,程序運(yùn)行到斷點(diǎn)處不會(huì)停止,只會(huì)更新顯示區(qū)域。這樣,我們就可以觀察到一個(gè)動(dòng)態(tài)的顯示效果。這個(gè)工具位于View/Graph/ Time/Frequency。使用圖形觀察工具之前需要對(duì)他的一些屬性進(jìn)行設(shè)置,他的具體使用方法我們?cè)趯?shí)驗(yàn)步驟中講解。五、實(shí)驗(yàn)步驟1. 首先建立好一個(gè)工程,在這個(gè)工程中我們要建立三個(gè)相關(guān)文件。一個(gè)是C語(yǔ)言源文件,一個(gè)是匯編語(yǔ)言源文件,還有一個(gè)是連接文件。建立的方法同以前的實(shí)驗(yàn)是一樣的。建立好這些文件后,需要把他們統(tǒng)統(tǒng)加入進(jìn)建立的工程當(dāng)中。文件在命名的時(shí)候,一定
24、要注意文件名的后綴,也就是文件的類(lèi)型要正確。2. 我們首先編輯中斷矢量表。中斷矢量表編輯的時(shí)候,他的長(zhǎng)度要正確,每個(gè)中斷的位圖24 VC5410中斷順序圖置要清楚,在定時(shí)器中斷位置,加上一個(gè)跳轉(zhuǎn)指令,指向C源程序的中斷服務(wù)程序的地方。 中斷矢量表的匯編語(yǔ)言文件代碼如下 .mmregs.ref _c_int00.ref _tint .global _table;-; interrupte vector table !;-vector:rs b _c_int00 nop nopnmi b _ret nop nopsint17 b _ret nop nopsint18
25、b _ret nop nopsint19 b _ret nop nopsint20 b _ret .word 0,0sint21 b _ret .word 0,0sint22 .word 01000h .word 0,0,0sint23 .word 0ff80h .word 0,0,0sint24 .word 01000h .word 0,0,0sint25 .word 0ff80h .word 0,0,0sint26 .word 01000h .word 0,0,0sint27 .word 0ff80h .word 0,0,0sint28 .word 01000h .word 0,0,0si
26、nt29 .word 0ff80h .word 0,0,0sint30 .word 01000h .word 0,0,0int0 b _ret nop nopint1 b _ret nop nopint2 b _ret nop noptint b _tintnopnopbrint0 b _ret nop nopbxint0 b _ret nop noptrint b _ret nop nopdmac1 b _ret nop nopint3 b _ret nop nophpint b _ret nop nopq26 .word 0ff80h .word 0,0,0q27 .word 01000h
27、 .word 0,0,0dmac4 b _ret nop nopdmac5 b _ret nop nopq30 .word 0ff80h .word 0,0,0q31 .word 01000h .word 0,0,0;-; end of interrupte vector table !;-_ret rete3. 對(duì)于C語(yǔ)言文件,主要分為兩個(gè)部分。首先是對(duì)系統(tǒng)參數(shù)的設(shè)置,包括DP指針,矢量表的起始地址,定時(shí)器的參數(shù)設(shè)置。這些設(shè)置過(guò)程,實(shí)際上就是對(duì)每個(gè)相關(guān)的寄存器的值的設(shè)定。為了正確的設(shè)置這些值,一是要理解每個(gè)寄存器的每個(gè)比特代表什么意思,而是要通過(guò)分析設(shè)計(jì)的要求,計(jì)算出這些值的大小。如果對(duì)寄存
28、器的比特位的意思不是很理解,可以使用CCS的Help菜單。CCS的Help功能非常強(qiáng)大,幾乎包含了編程時(shí)候需要的關(guān)于DSP的一切信息。對(duì)于這些寄存器賦值的方法有兩種,一種是使用C語(yǔ)言中嵌套匯編語(yǔ)句的方法,因?yàn)檫@樣可以利用各個(gè)寄存器的助記符,直接賦值給這些助記符;二是可以使用C語(yǔ)言的指針功能。我們知道,DSP的所謂每一個(gè)寄存器,實(shí)際上都是存儲(chǔ)器映射寄存器,他們本質(zhì)上都是DSP位于數(shù)據(jù)區(qū)開(kāi)始的一些存儲(chǔ)空間。用指針的方法對(duì)這些地址賦值,實(shí)際上就是對(duì)寄存器賦值。同學(xué)們可以使用兩種方法分別嘗試,在數(shù)據(jù)空間觀察兩種方法結(jié)果的異同。 C語(yǔ)言文件的第二部分是中斷服務(wù)程序。服務(wù)程序的子程序名稱(chēng)要和中斷矢量表中跳
29、轉(zhuǎn)指令的標(biāo)號(hào)一樣,只是沒(méi)有了下劃線。指令的內(nèi)容就是根據(jù)前面的推導(dǎo),使用遞推的方法,每次執(zhí)行一次中斷函數(shù)就產(chǎn)生一個(gè)數(shù)據(jù)。程序的原理前面已經(jīng)講解了。C程序代碼如下:#include stdio.h#define IMR 0#define ST0 6#define ST1 7#define TIM 0x24#define PRD 0x25#define TCR 0x26#define PMST 29int con_buf=0;float buf128; /* save out wave buffer ! */float y0;float y1=0.30901699;float y2=0.587785
30、25; /* y2= y1*A */const float aa=1.90211304;const float bb=-1.; main()int *dest; dest = (int *)IMR; *dest = 0; dest = (int *)PMST; *dest = 0x1020;/*interrupt vector at 0x1000 */ dest = (int *)TCR; *dest = 0x0010; dest = (int *)PRD; *dest = 2499; dest = (int *)IMR; *dest = 0x0008;/* enable timer0 TIN
31、T0 */ dest = (int *)TCR; *dest = 0x0030; *dest = 0x0000; asm ( rsbx intm);void interrupt tint() y0 = aa*y1 + bb*y2;y2 = y1;y1 = y0; bufcon_buf=y0;con_buf+;if(con_buf = 128) con_buf=0; /* set breakpoint to show wave ! */4對(duì)于連接文件的編輯,由于出現(xiàn)了C語(yǔ)言文件,系統(tǒng)默認(rèn)的段增加了。如果是單獨(dú)的匯編文件我們知道,只有.text和.data、.bss是三個(gè)默認(rèn)段,但是,有了C文件,增加了其他一些段,主要有.cinit、.switch、.const、.systmem、.stack等。這些段是在由C編譯為匯編的時(shí)候產(chǎn)生的,不同的段運(yùn)用于存放不
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 幼兒園元旦活動(dòng)計(jì)劃8篇
- 2024年版企業(yè)勞動(dòng)協(xié)議參考文本版B版
- 2022幼兒手工教案
- 小區(qū)物業(yè)工作計(jì)劃
- 2024-2030年中國(guó)酚醛樹(shù)脂涂料行業(yè)發(fā)展運(yùn)行現(xiàn)狀及投資潛力預(yù)測(cè)報(bào)告
- 半導(dǎo)體激光治療儀項(xiàng)目可行性分析報(bào)告
- 大班健康活動(dòng)教案四篇
- 大學(xué)班主任工作計(jì)劃
- 美術(shù)教師個(gè)人工作總結(jié)5篇
- 醫(yī)學(xué)類(lèi)實(shí)習(xí)報(bào)告模板九篇
- 大學(xué)生勞動(dòng)教育課件:發(fā)展專(zhuān)業(yè)技能進(jìn)行創(chuàng)造性勞動(dòng)
- 2024年意識(shí)形態(tài)工作專(zhuān)題會(huì)議記錄【6篇】
- 北師大版九年級(jí)《數(shù)學(xué)》上冊(cè)全冊(cè)教案
- 人民大會(huì)堂介紹課件
- 建行家裝貸產(chǎn)品介紹
- 護(hù)理分級(jí)標(biāo)準(zhǔn)2023版(新舊標(biāo)準(zhǔn)對(duì)比詳解)
- 《比特幣完整介紹》課件
- 機(jī)電運(yùn)輸安全基本知識(shí)
- XX藥業(yè)公司受試者日記卡
- 連鎖藥店GSP質(zhì)量管理體系詳細(xì)文件
- 《電氣工程講》課件
評(píng)論
0/150
提交評(píng)論