版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
TMS320LF2407DSP實(shí)驗(yàn)指導(dǎo)書鄭群英鄭群英編著重慶大學(xué)――美國(guó)德州儀器公司數(shù)字信號(hào)處理解決方案實(shí)驗(yàn)室20038實(shí)驗(yàn)一 TMS320LF2407DSP實(shí)驗(yàn)開(kāi)發(fā)系統(tǒng)及CC軟件應(yīng)用一.實(shí)驗(yàn)說(shuō)明DSP微控制器TMS320LF24x芯片作為設(shè)計(jì)對(duì)象,以TMS320LF2407芯片構(gòu)成的實(shí)驗(yàn)開(kāi)發(fā)系統(tǒng)作為目標(biāo)系統(tǒng);用XDS510硬件仿真器通過(guò)JTAG接口與開(kāi)發(fā)調(diào)試主機(jī)聯(lián)接,來(lái)建立程序的聯(lián)機(jī)調(diào)試環(huán)境。Windows版的CodeComposer(簡(jiǎn)稱CC)是一個(gè)功能強(qiáng)大的高級(jí)語(yǔ)言交互式調(diào)試器,CC的功能非常子,說(shuō)明如何使用CC’C2000來(lái)開(kāi)發(fā)簡(jiǎn)單的匯編程序、編譯并使用仿真器運(yùn)行這一程序。同學(xué)們也可以根據(jù)自己的應(yīng)用問(wèn)題,嘗試創(chuàng)建新的項(xiàng)目、新的工作組和新的源文件。二.實(shí)驗(yàn)?zāi)康恼J(rèn)識(shí)TMS320LF2407DSP實(shí)驗(yàn)開(kāi)發(fā)系統(tǒng)的硬件結(jié)構(gòu)。了解TMS320LF2407DSP應(yīng)用程序的開(kāi)發(fā)調(diào)試流程。學(xué)習(xí)使用CC’C2000調(diào)試TMS320LF2407DSP程序。三.實(shí)驗(yàn)內(nèi)容預(yù)習(xí)附錄四、五中的相關(guān)內(nèi)容CC’C2000使用操作練習(xí)四.實(shí)驗(yàn)操作練習(xí)下面將引導(dǎo)同學(xué)們利用CC’C2000幫助同學(xué)們盡快地熟悉集成開(kāi)發(fā)環(huán)境CC’C2000典型的使用方法。實(shí)驗(yàn)設(shè)備鏈接在聯(lián)機(jī)調(diào)試時(shí),需要將調(diào)試主機(jī)PC、XDP硬件仿真器及待調(diào)試的目標(biāo)系統(tǒng)按如下方法進(jìn)行鏈接:JTAGJ2?用并口電纜將PC主機(jī)并行口與仿真器相連;?將穩(wěn)壓電源的輸出調(diào)為+5V分別引入P101、23、4中;?將+5VDC/1.5A電源原邊接220V交流電壓,副邊鏈接仿真器外接電源插孔(針對(duì)XDSPP仿真器。集成調(diào)試軟件安裝(已安裝好,不需要重做)Windows2000操作系統(tǒng)之下,安裝CC4.10版本的CC的全過(guò)程參見(jiàn)附錄五。仿真器軟件Driver安裝(參見(jiàn)附錄四)仿真器運(yùn)行環(huán)境設(shè)置CCDSP的程序調(diào)試。具體操作方法參見(jiàn)附錄四。CC2000的簡(jiǎn)單應(yīng)CC’C2000是CC的核心部分,用于創(chuàng)建和管理項(xiàng)目,為開(kāi)發(fā)人員提供自動(dòng)化程序高、操作簡(jiǎn)便的符號(hào)化調(diào)試工作平臺(tái)。在CC’C2000中的用戶文件是組織成項(xiàng)目的。因此,使用CC’C2000的第一件事是創(chuàng)建新的項(xiàng)目,以說(shuō)明用戶準(zhǔn)備運(yùn)行軟件的目標(biāo)系統(tǒng)CPU,并創(chuàng)建項(xiàng)目所包含的文件列表。創(chuàng)建簡(jiǎn)單的項(xiàng)目(在本實(shí)驗(yàn)指導(dǎo)書中,若不聲明,點(diǎn)擊或雙擊均指鼠標(biāo)左鍵)利用CCC2000Projec碼文件和必要的庫(kù)文件加入進(jìn)項(xiàng)目中。具體步驟如下:C:\tic2xx\myprojects\wor?把“C:\tic2xx\c2000\tutorial\realtime”的文件復(fù)制到新建立的文件夾中。?在WindowsCC200C1.1所示的CC’C2000操作界面。圖1.1 CC’C2000操作界面?在圖1.1ProjecNe(項(xiàng)目>新建)時(shí),出現(xiàn)一個(gè)如圖1.2SaveNewProjectA(另存為項(xiàng)目)對(duì)話框,選擇要保存項(xiàng)目文件的文件夾(即前面創(chuàng)建的工作目錄wor本試驗(yàn)教程中取用“sy1”作為我們新創(chuàng)建的項(xiàng)目文件名輸入并保存。這時(shí)CC’C2000會(huì)自動(dòng)創(chuàng)建一個(gè)名為“sy1.mak”的項(xiàng)目文件。圖1.2 新項(xiàng)目保存對(duì)話框新建、編輯一個(gè)簡(jiǎn)單的源文件1.1所示的界面中,選擇菜單命令“File>New>SourceFile”(文件>新建>源文件)時(shí),工作區(qū)內(nèi)會(huì)出現(xiàn)一個(gè)如圖1.3所示的文本編輯窗口,作為創(chuàng)建源文件的編輯窗口,Untitled圖1.3 文本編輯窗口1.3中,若欲為即將輸入的源文件預(yù)先命名,那就選用菜單命令“File>SaveAs”(文件>另存為,隨即會(huì)出現(xiàn)一個(gè)如圖1.4所示的文件“保存為”對(duì)話框。圖1.4 保存為對(duì)話框在圖1.4sy件存放目錄確保一致。然后點(diǎn)擊“保存”按鈕,對(duì)話框消失,文本編輯窗口的標(biāo)題欄中換成sy(參見(jiàn)圖1.5所示的標(biāo)題欄).as”保存。然后在文本編輯窗口輸入下面一段程序,作為我們編輯、匯編和調(diào)試的實(shí)例程序。CC’C2000編輯器不支持漢字編輯工作,分號(hào)后面的注釋部分可以用英語(yǔ)或者漢語(yǔ)拼音,也可以使用其他的編輯軟件。由于匯編語(yǔ)言源文件[.asm]屬于ASII碼的純文本文件格式的文件,當(dāng)然也可以選用Windwos附件中的記事本或?qū)懽职宓绕渌梢跃庉嫾兾谋疚募能浖?asCC2000調(diào)用。CCC2000件整塊剪貼技術(shù);彩色辨識(shí)正文等。它的鍵盤命令配合常規(guī)的鼠標(biāo)操作可實(shí)現(xiàn)C語(yǔ)言和匯編語(yǔ)言源文件的編輯。1.18。當(dāng)然,在掌握了本程序后,完全可以充分發(fā)揮想象,改變一下程序內(nèi)容和燈的接法(比如用光耦驅(qū)動(dòng)繼電器來(lái)控制霓虹燈,做出各種變化非凡的大型燈光廣告牌。程序清單:.include"vector.h".include"F2407REGS.H".def_c_int0,LEDLED.set0200h.bssDEYH,1.textSYSINIT:;系統(tǒng)初始化子程序SETCINTM;關(guān)閉總中斷CLRCSXMCLRCOVMCLRCCNF;B0isconfiguredasdataspaceLDP#SCSR1>>7;SCSR1所在的頁(yè)SPLK#81FEH,SCSR1;CLKIN=6M,CLKOUT=24MSPLK#0E8H,WDCR;DisableWDTLDP#IMR>>7SPLK#0h,IMR;disableallinterruptSPLK#0FFFFh,IFR;clearalltheinterruptflagsoffirstlevelLDP#MCRC>>7LACLMCRCAND#0FBFFh;IOPF2口為通用的IO口SACLMCRCLACLPFDATDIROR#0400h;使PF2口為輸出口AND#0FFFBHSACLPFDATDIR;74HC273芯片LACLMCRAAND#0FF00HSACLMCRA;IOPB[0-7]為一般I/O口功能LACLPBDATDIROR#0FF00HAND#0FF00H;IOPB[0-7]為輸出功能,0SACLPBDATDIRRET;*****************************************************************************CLOCK:
LDP
;74HC273驅(qū)動(dòng)脈沖的子程序LACLPFDATDIRLACLPFDATDIROR#0004H;PF2口輸出高電平SACLPFDATDIRRPTNOPLACL#10HPFDATDIR;延時(shí)AND#0FFFBH;PF2口輸出低電平SACLRETPFDATDIR;***************************************************************************DELAY: ;延時(shí)子程序LDP #DEYH>>7SPLK0FFFFH,DEYHLACLDEYHCON:CLRCSUBC#1EXIT_c_int0BCNDNOPBRETEXIT,NCCON;主程序的入口LOOP1:CALLLDPSYSINIT#LED>>7;系統(tǒng)初始化LOOP:SPLKLDP#0001h,LED#PBDATDIR>>7;LED1LACLPBDATDIR;把PBDATDIRACC寄存器AND#0FF00H;0LDP#LED>>7ORLEDLDP#PBDATDIR>>7SACLPBDATDIR;把需要顯示的值賦給相應(yīng)的寄存器CALLCLOCK;產(chǎn)生瑣存脈沖LDP#LED>>7LACLLEDCLRCC;清進(jìn)位位,以免對(duì)移位造成影響ROLSACLLED;左移一位CALLDELAY;延時(shí)LDP#LED>>7PHANTOMGISR1GISR2GISR3GISR4GISR5GISR6
BIT LED,6BCND B LOOPNOPRETRETRETRETRETRETRET.end
;LEDTC位;LED的移位次數(shù)已到,LED重新賦值;循環(huán)源程序輸完之后(如圖1.5所示Fil>Sav(文件>保存)及時(shí)保存到C:\tic2xx\myprojects\work\sy1asm棄。將文件添加到該項(xiàng)目中
圖1.5 源程序編輯窗口由于項(xiàng)目文件是項(xiàng)目的管理文件,故項(xiàng)目管理的信息都需存放在“sy1.mak”的項(xiàng)目文件中,在對(duì)用戶系統(tǒng)進(jìn)行開(kāi)發(fā)時(shí)需要將所需文件包含在項(xiàng)目文件中,即使用工程管理方法:一次性將工程的全部源文件、頭文件、鏈接命令文件、用戶庫(kù)文件送入工程管理器,統(tǒng)一管理“匯編/編譯”和“鏈接/定位在圖1.1ProjecOpe(項(xiàng)目>打開(kāi),再根據(jù)給出ProjectOpe”對(duì)話框,選擇已存項(xiàng)目文件所在的文件夾并打開(kāi)文件(如圖1.6所示,然后再選擇菜單命令“Project>AddFilesToProject”(項(xiàng)目>添加文件到項(xiàng)目),出現(xiàn)一個(gè)如1.7所示的“AddFilestoProject.asm匯編源文件、.cmd鏈接命令文件和一個(gè)“rts2xx.lib”的庫(kù)文件按類一一添加到該項(xiàng)目中,在默認(rèn)情況下,該庫(kù)C:\tic2xx\c2000\cgtools\.lib.hinclude”入其它類型的文件。圖1.6 項(xiàng)目文件選擇對(duì)話框察看項(xiàng)目文件
圖1.7 添加文件對(duì)話框一旦編譯了文件,Project窗口將用樹(shù)型結(jié)構(gòu)顯示項(xiàng)目包含的組和文件的關(guān)系,如圖1.8文件是否加入到相應(yīng)文件夾中。當(dāng)啟動(dòng)CC2000VieProjec(觀察>項(xiàng)目ProjecOpenprojec1.9所示,根據(jù)給出(如圖1.)的對(duì)話框,用前面相同的方法選擇(具體操作參見(jiàn)附錄五。 圖1.8 項(xiàng)目管理窗口 圖1.9 文件操作方法編譯鏈接啟動(dòng)CC’C2000是:在圖1.1Projec>Ope(項(xiàng)目>打開(kāi),以便選定需ProjecRebuildAl(項(xiàng)目>匯編編譯和鏈接所有文件CCC2000sy1.ma”管理下的源文sy1.assy1.ob1.10Buil(創(chuàng)建)窗口,其中倒數(shù)第二行用藍(lán)色字告訴我們BuildComplet(創(chuàng)建完成CC’C2000匯編編譯器是如何幫助我們查找錯(cuò)誤的(即錯(cuò)誤和警告自動(dòng)定位。1.10創(chuàng)建結(jié)果窗口(不成功)根據(jù)系統(tǒng)提示該錯(cuò)誤的類型和位置回到原程序中查看和修改行編譯。如果編譯正確,將會(huì)鏈接生成一個(gè)文件名為“sy1.out”的可執(zhí)行文件。再次出現(xiàn)如圖1.11Buil(創(chuàng)建)窗口,最后一行告訴我們了一個(gè)可以在CC’C2000環(huán)境下用XDS510硬件仿真器進(jìn)行調(diào)試的、完整的項(xiàng)目。1.11創(chuàng)建結(jié)果窗口(成功)對(duì)于建好的項(xiàng)目,一般情況下,在退出CC’C2000調(diào)試環(huán)境時(shí),系統(tǒng)會(huì)自動(dòng)將“項(xiàng)目文.wksFile>Save”即可保存到“sy1.asm”文件中。sy1.out”可執(zhí)行文件裝載到實(shí)驗(yàn)板上之后才能對(duì)1.1Fil>LoadProgra(文件>裝載程序1.12LoadProgra文件下載到實(shí)驗(yàn)板上。文件下載之后,就可對(duì)文件進(jìn)行在線調(diào)試。圖1.12 程序裝載對(duì)話框名必須保持一致。調(diào)試程序在設(shè)計(jì)漏洞,算法()設(shè)計(jì)是否合理,是否能夠準(zhǔn)確地控制各種硬件資源,是否能夠?qū)崿F(xiàn)預(yù)期的功能,等等。CC’C2000的調(diào)試環(huán)境功能很強(qiáng),可以在C語(yǔ)言級(jí)調(diào)試,也可以在匯編語(yǔ)言級(jí)調(diào)試,并提供了多種運(yùn)行程序的方式或調(diào)試手段,比較常用的有以下幾種:連續(xù)運(yùn)行、設(shè)置觀察窗、手段的使用方法:?連續(xù)運(yùn)行方式:在圖1.1所示的界面上,將源程序觀察窗作為當(dāng)前窗口。首先應(yīng)選擇菜單命令“DebugResetDS(DSP復(fù)位,或者點(diǎn)擊工具欄上的按鈕,使DSP復(fù)位,然后選擇菜單命令Debu>Ru(調(diào)試>程序運(yùn)行,或者按動(dòng)5鍵,或者點(diǎn)擊工具欄上的 圖標(biāo)按鈕,均可令程序進(jìn)入實(shí)時(shí)運(yùn)行狀態(tài)。當(dāng)輸入上述命令時(shí),我們似乎看不出程序有任何反應(yīng),果變?yōu)闇\色則表明程序正在運(yùn)行。
由于這段程序結(jié)構(gòu)是無(wú)限循環(huán)程序結(jié)構(gòu)欲想終止程序運(yùn)行可點(diǎn)擊工具欄上的 圖標(biāo)DebuHal(調(diào)試>停止Shitf+”組合鍵。隨即,工具欄的顏色復(fù)原,表明程序停止運(yùn)行,并隨機(jī)地停留在程序的某一行上。一種很有效的手段。因此,需要進(jìn)一步探討和選擇其它的調(diào)試手段。?設(shè)置觀察窗口:CC’C20006個(gè)不重疊觀行狀況,進(jìn)而達(dá)到調(diào)試程序的目的。實(shí)驗(yàn)教程中調(diào)試的這個(gè)例子比較簡(jiǎn)單,其中用到的寄存器除了ACC、ST0、ST1和PC該變量會(huì)被不停地改寫。增設(shè):反匯編觀察窗口、存儲(chǔ)器窗口、CPU寄存器窗口、觀察窗口。詳細(xì)用法參見(jiàn)附錄五。存儲(chǔ)器窗口:可直接觀察存儲(chǔ)器的內(nèi)容。詳細(xì)用法參見(jiàn)附錄五。CPU寄存器窗口:其中包含“CPURegister”和“StatusRegister”兩個(gè)選項(xiàng),點(diǎn)擊相應(yīng)的選項(xiàng)可以觀察調(diào)試過(guò)程中CPU寄存器和各個(gè)狀態(tài)位的變化情況。詳細(xì)用法參見(jiàn)附錄五。觀察窗口:觀察調(diào)試過(guò)程中的變量、C表達(dá)式、地址和寄存器的值。在圖1.1所示的界VieWatchWindo(視圖>觀察窗口,將有一個(gè)空白窗口出現(xiàn)在CC2000窗口的下部,如圖1.13所選擇的變量、寄存器和存儲(chǔ)器的內(nèi)容。圖1.13 CC2000窗口下的觀察窗口InsertNewExpressio1.13所示。進(jìn)入所選擇的圖1.14“WatchAddExpression(添加變量對(duì)話框O察窗中可以查看到以藍(lán)色顯示的變量的物理地址(十進(jìn)制、符號(hào)名和數(shù)值。圖1.14 添加變量對(duì)話框鼠標(biāo)右鍵,在彈出的語(yǔ)境菜單中選擇“RemoveCurrentExpression”即可。示出該變量的地址;如果需要顯示該變量的值,則需要在變量名前加“*”號(hào)。后緊跟一個(gè)逗號(hào)和一個(gè)格式指示字母。常用的格式指示字母和其代表格式的對(duì)應(yīng)關(guān)系如表DEFDEF十進(jìn)制XXOUC十六進(jìn)制八進(jìn)制ASCII字符(字節(jié))?單步運(yùn)行方式:?jiǎn)尾竭\(yùn)行是一種控制程序運(yùn)行過(guò)程的有效方法,而且能夠及時(shí)觀察到程序的運(yùn)行狀態(tài)。CCC2000桌面上各個(gè)觀察法如下:在圖1.1所示的界面上,將源程序觀察窗作為當(dāng)前窗口,用前面所述方法使DSP復(fù)位。然后選擇菜單命令DebuStepInt(調(diào)試>單步運(yùn)行方式,或者按一下鍵盤上的F鍵,8或者點(diǎn)擊工具欄中的 圖標(biāo)按鈕,均可令程序進(jìn)入單步運(yùn)行狀態(tài)。一次次地點(diǎn)擊 按鈕的同時(shí),可以看到觀察窗中出現(xiàn)變紅的寄存器或變量,并且其中的值會(huì)不斷地及時(shí)更新。程序的運(yùn)行過(guò)程。程序的單步運(yùn)行方式與實(shí)時(shí)連續(xù)運(yùn)行方式相比,兩者具有很強(qiáng)的互補(bǔ)性。?動(dòng)畫運(yùn)行方式動(dòng)畫運(yùn)行方式既像連續(xù)運(yùn)行方式那樣自動(dòng)控制程序的運(yùn)行過(guò)程在圖1.1所示的界面上,也應(yīng)將源程序觀察窗作為當(dāng)前窗口,并先讓DSP復(fù)位,然后選擇菜單命令DebuAnimat(調(diào)試>動(dòng)畫運(yùn)行方式,或者按一下鍵盤上的F12
鍵,或者點(diǎn)擊工具欄中的 圖標(biāo)按鈕,均可令程序進(jìn)入動(dòng)畫運(yùn)行狀態(tài)。同時(shí)應(yīng)注意觀察寄存器變量的變化規(guī)律,是否符合設(shè)計(jì)要求。若想讓程序停止,點(diǎn)擊?設(shè)置斷點(diǎn)運(yùn)行方式:
按鈕即可。單步運(yùn)行那些復(fù)雜的或者待調(diào)試的程序片段說(shuō),設(shè)置斷點(diǎn)是控制程序運(yùn)行過(guò)程的另一種有效方法。一種最簡(jiǎn)便的設(shè)置斷點(diǎn)的方法:在圖1.1所示的界面上確保當(dāng)前窗口為源程序觀察窗。用光標(biāo)標(biāo)記準(zhǔn)備設(shè)置斷點(diǎn)的源程序語(yǔ)句行后,點(diǎn)擊 圖標(biāo)按鈕或者雙擊鼠標(biāo),此時(shí),選定行會(huì)出現(xiàn)紅色背景,表示設(shè)置完成;點(diǎn)擊 圖標(biāo)按鈕,取消所設(shè)置的斷點(diǎn)。對(duì)已設(shè)置斷點(diǎn)的程序進(jìn)行調(diào)試時(shí)DSP12個(gè)斷點(diǎn)又會(huì)暫停,等等一直調(diào)試下去。5CCS(以CC4.10版本為例的基本用法,有許多的功能還需要同學(xué)們根據(jù)自己的習(xí)慣愛(ài)好去慢慢挖掘。實(shí)驗(yàn)二 常用指令操作實(shí)驗(yàn)一.實(shí)驗(yàn)說(shuō)明在設(shè)計(jì)DSP應(yīng)用系統(tǒng)時(shí),指令組成了DSP系統(tǒng)的應(yīng)用軟件。由于種種原因,所編寫的軟件中總會(huì)存在一些問(wèn)題,因此必須對(duì)軟件進(jìn)行調(diào)試,通過(guò)調(diào)試修改軟件中不合理的地方。在軟件調(diào)試中,一個(gè)重要問(wèn)題是觀察指令執(zhí)行的結(jié)果。例如,在DSP應(yīng)用系統(tǒng)中輸出一個(gè)信號(hào)波形,但發(fā)現(xiàn)輸出的波形與預(yù)期的不同,這時(shí)就需要檢查原因。由于DSP指令執(zhí)方法。二.實(shí)驗(yàn)?zāi)康耐ㄟ^(guò)在TMS320LF2407DSP實(shí)驗(yàn)開(kāi)發(fā)系統(tǒng)中實(shí)際使用指令,初步學(xué)會(huì)如何使用實(shí)驗(yàn)中的指令。學(xué)習(xí)指令的功能和基本使用操作方法。學(xué)習(xí)DSP應(yīng)用系統(tǒng)中的系統(tǒng)調(diào)試方法,學(xué)會(huì)單步調(diào)試的基本方法。學(xué)會(huì)如何觀察指令的執(zhí)行結(jié)果。三.實(shí)驗(yàn)內(nèi)容熟悉常用匯編指令。熟悉單步執(zhí)行的調(diào)試方法。熟悉在調(diào)試環(huán)境下觀察指令的執(zhí)行結(jié)果和相應(yīng)寄存器內(nèi)容。四.實(shí)驗(yàn)步驟立即數(shù)載入指令實(shí)驗(yàn)操作立即數(shù)載入指令包括:累加器載入立即數(shù)。向輔助寄存器載入數(shù)。DP載入立即數(shù)。DP是狀態(tài)寄存器的ST0(0~8)位,作為數(shù)據(jù)空間直接尋址時(shí)地址的高9位A15~A。本次練習(xí)中,需要完成如下工作:1234h。向累加器裝載立即數(shù)ABCDh4位。向輔助寄存器AR3-5裝載立即數(shù)。DP的裝載立即數(shù)??梢钥吹?,本次練習(xí)不僅是向某個(gè)寄存器裝載數(shù)據(jù),而且還包括向某個(gè)寄存器內(nèi)容指向的某些數(shù)據(jù)存儲(chǔ)單元裝載數(shù)據(jù)。實(shí)驗(yàn)時(shí),可以先編寫好上述指令,作為一個(gè)程序段進(jìn)行編譯。然后打開(kāi)CPU寄存器觀器內(nèi)容的變化。單步操作前可以通過(guò)CPU寄存器觀察窗口對(duì)各相關(guān)寄存器進(jìn)行修改,以便更清楚地觀察到指令執(zhí)行的結(jié)果。直接尋址方式下的數(shù)據(jù)存取對(duì)數(shù)據(jù)空間的直接尋址采用以下兩種方式:程序如下:間接尋址方式下的數(shù)據(jù)存取在本操作中,練習(xí)間接尋址中的操作數(shù)存儲(chǔ)器操作。這是利用輔助寄存器ARx(x=0~7)ARx的內(nèi)容就是數(shù)據(jù)空間的地址,ARx加星號(hào)(*)前綴表示的是ARx中的地址所指向的存儲(chǔ)器單元,而且保存在ARx中的地址在對(duì)存儲(chǔ)單元訪問(wèn)前/后可以進(jìn)行修改。具體有7種修改方式:;訪問(wèn)后ARx中地址不變*+ ;訪問(wèn)后ARx1- ;訪問(wèn)后ARx10+ ;訪問(wèn)后ARx中地址加上AR0中的值0- ;訪問(wèn)后ARx中地址減去AR0中的值BRO+ ;訪問(wèn)后ARx中地址加上AR0中的值,并反向進(jìn)位BRO- ;訪問(wèn)后ARx中地址減去AR0中的值,并反向進(jìn)位程序編制說(shuō)明如下:TST寄存器中存放的移位值;語(yǔ)句AR3=#2000h和語(yǔ)句*AR3=#0AC01h2000h的數(shù)據(jù)單元存放數(shù)據(jù)AC01h;T=#8和B=*AR3-<<TS-2000h12位載入累加器B中,而且AR311FFFh;(4)語(yǔ)句*,AR3+0=#1111h到語(yǔ)句*,AR3(#16)=#5555h。程序清單如下:加減運(yùn)算使用加減運(yùn)行指令時(shí),應(yīng)當(dāng)注意有關(guān)寄存器的影響,主要有如下兩個(gè):ST1中符號(hào)擴(kuò)展模式位SXM――的設(shè)置對(duì)加減運(yùn)算的影響:SXM=0,符號(hào)不擴(kuò)展SXM=1,符號(hào)擴(kuò)展ALU運(yùn)算模式位C16的設(shè)置及其對(duì)加減運(yùn)算的影響:C16=0,雙精度(32位)運(yùn)算C16=1,16位運(yùn)算程序清單如下:5.邏輯運(yùn)算程序清單如下:移位運(yùn)算程序清單如下:乘法運(yùn)算本指令操作主要是練習(xí)如何完成乘法操作,其中包括乘、加操作。程序清單如下:實(shí)驗(yàn)三 “追燈”式電路控制一.實(shí)驗(yàn)說(shuō)明輸入/輸出端口(I/O口)是DSP芯片內(nèi)部電路與外部世界交換信息的通道。輸TMS320LF2407芯片做基本的I/O控制接口。使用循環(huán)指令和多種送數(shù)延時(shí)循環(huán)程序,設(shè)計(jì)DSP的“追燈”控制器,是最容易和最LED展示的變化組合數(shù)據(jù)事先存在數(shù)組中,而在程序中逐一由數(shù)組中取出個(gè)別的樣本數(shù)據(jù)送往74HC273鎖存以驅(qū)動(dòng)LED發(fā)光二極管SW-DIP8須置ON,便可完成“追燈”式電的變化較多,展示效果較佳。實(shí)驗(yàn)箱中的TMS320LF2407芯片的輸出端口用IOPB0~IOPB7引腳,TMS320LF2407的IOPF274HC273的CLK74HC273的控制信號(hào);TMS320LF2407的RESET(復(fù)位)74HC273CLR,復(fù)位時(shí),74HC273輸出引腳為低電平。二.實(shí)驗(yàn)?zāi)康氖煜せ镜腡MS320LF240X系列的匯編語(yǔ)言。了解實(shí)驗(yàn)開(kāi)發(fā)系統(tǒng)的基本I/O硬件電路的控制方法。進(jìn)一步熟悉設(shè)計(jì)并調(diào)試程序的基本方法。三.實(shí)驗(yàn)內(nèi)容設(shè)計(jì)并調(diào)試用于TMS320LF2407的“追燈”控制器,要求“燈”的花樣和顯示次數(shù)均由軟件任意設(shè)定。程序要求具有多種不同的燈亮花樣,能實(shí)現(xiàn)發(fā)光二極管左移、右移即所謂“追燈”功能。四.實(shí)驗(yàn)硬件電路圖3.1 TMS320LF與40LED接口電路五.實(shí)驗(yàn)參考程序清單C程序I/O端口作為輸出(追燈)源程序代碼:vectors.asm”.title.ref.sectint1:int2:int3:int4:int5:
"vectors.asm"_c_int0,_nothing".vectors"b _c_int0b _nothingb _nothingb _nothingb _nothingb _nothingint6: b主程序
_nothing8個(gè)LED的循環(huán)顯示#include "register.h"initial() //初始化子程序{asm("setcSXM");asm("clrcOVM");asm("clrcCNF");asm("setcINTM");*SCSR1=0x81FE;*WDCR=0x0E8;*IMR=0x0000;*IFR=0x0FFFF;*MCRA=*MCRA&0x0FF;*PBDATDIR=*PBDATDIR|0x0FF00;*MCRC=*MCRC&0X0FBFF;*PFDATDIR=*PFDATDIR|0x0404;
//抑制符號(hào)位擴(kuò)展//累加器中結(jié)果正常溢出//B0被配置為數(shù)據(jù)存儲(chǔ)空間//禁止所有中斷//CLKIN=6M,CLKOUT=4*CLKIN=24M//SCSR2WDOVERRIDE//WD1,故可以用//軟件禁止看門狗//禁止所有中斷"10"http://IOPBI/OTMS320LF240x的//IOPB的設(shè)置//IOPB端口設(shè)置為輸出方式//IOPF2I/O端口//LED燈//IOPF2IOPF2=1//IOPF2=0//以上的操作產(chǎn)生一個(gè)脈沖,使LED全部熄滅}//主程序main(){intled;inti,k;initial();while(1){
//定義一個(gè)局部變量//定義其它一些臨時(shí)變量//系統(tǒng)初始化for(led=0x0080,i=0;i<8;led=led>>1,i++){*PBDATDIR=*PBDATDIR&0x0FF00;//首先屏蔽IOPB的各位*PBDATDIR=*PBDATDIR|led; //把需要顯示的值賦給IOPB端口*PFDATDIR=*PFDATDIR|0x0404; //IOPF2設(shè)置為輸出方式,且IOPF2=1*PFDATDIR=*PFDATDIR&0x0FFFB;//IOPF2=0,這兩句語(yǔ)句給一個(gè)脈沖,//LEDIOPB端口的值k=k;}}}
//為了保證顯示時(shí)間,給一定時(shí)間的延時(shí)//直接返回中斷服務(wù)程序voidinterruptnothing(){return;}匯編程序;I/O端口作為輸出(追燈);(1) 主程序IOSFT_REG .usect ".data0",1.include "F2407REGS.H"; .include "vector.h"
;要顯示的數(shù)據(jù)寄存器;引用頭部文件_c_int0:.def.text_c_int0;相當(dāng)于主程序的入口CALLSYSINIT;調(diào)系統(tǒng)初始化程序LDP#DP_PF2;7080h~7100h區(qū)LACLMCRAAND#000FFH;IOPBI/O功能SACLMCRALACLMCRCAND#0FBFFH;IOPF2I/O功能SACLMCRCLACLPBDATDIROR#0FF00H;IOPB口設(shè)置為輸出方式SACLPBDATDIRLDP#5H;0280h~0300h區(qū)SPLK#01H,IOSFT_REG;給顯示的數(shù)據(jù)賦初值LOOP:LDP#DP_PF2LACLPFDATDIROR#0404H;IOPF2設(shè)置為輸出方式,IOPF2=1SACLPFDATDIR;74HC273片選信號(hào)LDP#5HLACLIOSFT_REGLDP#DP_PF2OR#0FF00HSACLPBDATDIR;IOPB口LACLPFDATDIRAND#0FFFBH;IOPF2=0 (應(yīng)該使能顯示)SACLPFDATDIR;74HC273片選信號(hào)CALLDELAY;調(diào)延時(shí)程序LDP#5HLACLIOSFT_REGSFL;左移一位SACLIOSFT_REGBITIOSFT_REG,BIT8;判是否循環(huán)完一次,8個(gè)發(fā)光二極管BCNDLOOP1,TCBWAITLOOP1:LDP#5HSPLK#01H,IOSFT_REG;如循環(huán)完一次則顯示數(shù)據(jù)賦初值WAIT:NOPBLOOP;(2)SYSINIT:SETCINTMCLRCSXMCLRCOVMCLRCCNF;B0被配置為數(shù)據(jù)存儲(chǔ)空間LDP#0E0HSPLK#81FEH,SCSR1;CLKIN=6M,CLKOUT=24MSPLK#0E8H,WDCR;WDTLDP#0SPLK#0000H,IMR;不使能SPLK#0FFFFH,IFR;清全部中斷標(biāo)志RET;(3)軟件延時(shí)程序DELAY:MAR*,AR4LARAR4,#0FFFEHLARAR0,#00HDELAY1:SBRK#1NOPCMPR00BCNDDELAY1,NTCRET實(shí)驗(yàn)四 按鍵計(jì)數(shù)器一.實(shí)驗(yàn)說(shuō)明在控制電路中,通常需要以按鍵來(lái)控制程序執(zhí)行流程或是輸入數(shù)據(jù)。在圖4.1中,4個(gè)K~KTMS320LF2407IOPF3~IOPF4I/O端口的輸入,8只1 4發(fā)光二極管LED1~ILED8通過(guò)SW-DIP8撥碼開(kāi)關(guān)和74HC273鎖存器芯片分別對(duì)應(yīng)TMS320LF2407芯片的引腳IOPF0~IOPF7作為I/OI/O引腳,8只發(fā)光二極管。本實(shí)驗(yàn)箱中的K1TMS320LF2407I/OIOPF3K1鍵,則F數(shù)據(jù)和方向控制寄存器(PFDATDIR)3位為(IOPF3引腳)0,同時(shí)點(diǎn)亮發(fā)光二極管。二.實(shí)驗(yàn)?zāi)康恼莆瞻存I的工作原理、按鍵和TMS320LF2407芯片的接口技術(shù)以及按鍵輸入程序的設(shè)計(jì)和調(diào)試方法。掌握輸出端發(fā)光二極管的工作原理、顯示的信息與程序的設(shè)計(jì)和調(diào)試方法。三.實(shí)驗(yàn)內(nèi)容設(shè)計(jì)并調(diào)試用于TMS320LF2407芯片的計(jì)數(shù)程序,要求由按鍵K1作輸入并對(duì)其進(jìn)行計(jì)數(shù),計(jì)數(shù)的結(jié)果由LED7~LED0發(fā)光二極管以二進(jìn)制方式顯示。對(duì)程序稍作改動(dòng),用K4按鍵完成上述功能。四.實(shí)驗(yàn)硬件電路TMS320LF2407與鍵盤、LED接口電路五.實(shí)驗(yàn)參考程序清單通過(guò)編程,設(shè)計(jì)一個(gè)按鍵計(jì)數(shù)器,要求剛接通電源時(shí),8只發(fā)光二極管都不亮,表示計(jì)000000000BK11,發(fā)光二LED000000001B,然后松開(kāi)按鍵;再次按下K1鍵時(shí),計(jì)數(shù)器的值又加1,發(fā)光二極管LED100000010B,然后再松開(kāi)按鍵;依次255次按鍵時(shí),發(fā)光二極管LED7~LED0會(huì)全部點(diǎn)亮,其后的一次K1鍵0,就這樣循環(huán)往復(fù)。C語(yǔ)言程序說(shuō)明,vectors.asm都是相同的。源程序代碼:#include intm=0x0001;initial(){asm("asm("
setc SXM");clrc asm(" clrc CNF");*SCSR1=0x81FE;*WDCR=0x0E8;*IMR=0x0000;*IFR=0x0FFFF;*MCRA=*MCRA&0x0FF;*PFDATDIR=*PFDATDIR|0x0400;*PBDATDIR=*PBDATDIR|0x0FF00;*PFDATDIR=*PFDATDIR|0x0404;*PFDATDIR=*PFDATDIR&0xFFFB;}voidinlinedisable(){asm(" setcINTM");}intkeyscan(){intk,j;k=*PFDATDIR&0x0008;if(k==0x0008)k=0;elsek=1;if(k==1){for(j=30000;j>0;j--)j=j;k=*PFDATDIR&0x0008;if(k==0x0008)k=0;elsek=1;}return(k);}intkeyserve(){intk;k=*PFDATDIR&0x0008;if(k==0x0000)*PBDATDIR=(*PBDATDIR&0xFF00)+m++;else*PBDATDIR=*PBDATDIR;*PFDATDIR=*PFDATDIR|0x0404;*PFDATDIR=*PFDATDIR&0xFFFB;}main(){disable();initial();while(1){inti;i=0;i=keyscan();if(i==1)keyserve();}}voidinterruptnothing(){return;}匯編程序;鍵盤與發(fā)光二極管配合使用程序st0_temp.usect".b20",1;60st1_temp.usect".b20",1;61contextSTACK.usect.usect".b20",7".stack",40;62-68IOSFT_REG.usect".data0",1;顯示數(shù)據(jù)移位寄存器IO_COUNT.usect".data0",1;延時(shí)計(jì)數(shù)寄存器IO_DATA.usect".data0",1;I/O臨時(shí)數(shù)據(jù)緩沖區(qū)LEDXS.usect".data0",1;LED顯示的數(shù)據(jù)LEDFLAG.usect".data0",1;LED顯示標(biāo)志寄存器K1FLAG.usect".data0",1;K1標(biāo)志寄存器KEYDATA.usect".data0",1;讀得鍵盤值存放寄存器DP_USER.set.include5"F2407REGS.H";引用頭部文件.def _c_int0;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~;(1)建立中斷向量表.sect".vectors";定義主向量段RSVECTB_c_int0;PM0 ResetVector 1INT1BPHANTOM;PM2 Intlevel14INT2BGISR2;PM4 Intlevel25INT3BPHANTOM;PM6 Intlevel36INT4BPHANTOM;PM8 Intlevel47INT5BPHANTOM;PMA Intlevel58INT6BPHANTOM;PMC Intlevel69RESERVEDBPHANTOM;PME (AnalysisInt) 10SW_INT8BPHANTOM;PM10 UserS/Wint —SW_INT9BPHANTOM;PM12 UserS/Wint -SW_INT10BPHANTOM;PM14 UserS/Wint -SW_INT11BPHANTOM;PM16 UserS/Wint -SW_INT12BPHANTOM;PM18 UserS/Wint -SW_INT13BPHANTOM;PM1A UserS/Wint -SW_INT14BPHANTOM;PM1C UserS/Wint -SW_INT15BPHANTOM;PM1E UserS/Wint -SW_INT16BPHANTOM;PM20 UserS/Wint -TRAPBPHANTOM;PM22 Trapvector-NMIBPHANTOM;PM24 NonmaskableInt3EMU_TRAPBPHANTOM;PM26 EmulatorTrap2SW_INT20BPHANTOM;PM28 UserS/Wint -SW_INT21BPHANTOM;PM2A UserS/Wint -SW_INT22BPHANTOM;PM2C UserS/Wint -SW_INT23BPHANTOM;PM2E UserS/Wint -SW_INT24BPHANTOM;PM30 UserS/Wint -SW_INT25BPHANTOM;PM32 UserS/Wint -SW_INT26BPHANTOM;PM34 UserS/Wint -SW_INT27BPHANTOM;PM36 UserS/Wint -SW_INT28BPHANTOM;PM38 UserS/Wint -SW_INT29BPHANTOM;PM3A UserS/Wint -SW_INT30BPHANTOM;PM3C UserS/Wint -SW_INT31BPHANTOM;PM3E UserS/Wint—;pvecs.sect ".pvecs"PVECTORS B PHANTOMB PHANTOMB PHANTOMB PHANTOMB PHANTOMB PHANTOM
;定義子向量段;保留向量地址偏移量-0000h;保留向量地址偏移量-0001h;保留向量地址偏移量;保留向量地址偏移量;保留向量地址偏移量;保留向量地址偏移量B B B
;保留向量地址偏移量-05;SCI_RX_ISR;保留向量地址偏移量;SCI_TX_ISR ;保留向量地址偏移量BPHANTOM;保留向量地址偏移量BPHANTOM;保留向量地址偏移量BPHANTOM;-0ABPHANTOM;保留向量地址偏移量BPHANTOM;保留向量地址偏移量BPHANTOM;保留向量地址偏移量BPHANTOM;保留向量地址偏移量BPHANTOM;保留向量地址偏移量BPHANTOM;-10BPHANTOM;保留向量地址偏移量BPHANTOM;保留向量地址偏移量BPHANTOM;保留向量地址偏移量BPHANTOM;保留向量地址偏移量BPHANTOM;-15BPHANTOM;保留向量地址偏移量BPHANTOM;保留向量地址偏移量BPHANTOM;保留向量地址偏移量BPHANTOM;保留向量地址偏移量BPHANTOM;-1ABPHANTOM;保留向量地址偏移量BPHANTOM;保留向量地址偏移量BPHANTOM;保留向量地址偏移量BPHANTOM;保留向量地址偏移量BPHANTOM;保留向量地址偏移量BPHANTOM;-20BPHANTOM;保留向量地址偏移量BPHANTOM;保留向量地址偏移量BPHANTOM;保留向量地址偏移量BPHANTOM;保留向量地址偏移量BPHANTOM;-25BPHANTOM;-0026hBT1GP_ISR;保留向量地址偏移量-0027h T1PINT中斷BPHANTOM;-0028hBPHANTOM;保留向量地址偏移量BPHANTOM;-2ABPHANTOM;保留向量地址偏移量BPHANTOM;保留向量地址偏移量BPHANTOM;保留向量地址偏移量BPHANTOM;保留向量地址偏移量B B
;pvectoraddroffset0x02f-T3PINT;保留向量地址偏移量-30BPHANTOM;保留向量地址偏移量BPHANTOM;保留向量地址偏移量BPHANTOM;保留向量地址偏移量BPHANTOM;保留向量地址偏移量BPHANTOM;-35BPHANTOM;保留向量地址偏移量BPHANTOM;保留向量地址偏移量BPHANTOM;保留向量地址偏移量BPHANTOM;保留向量地址偏移量BPHANTOM;-3ABPHANTOM;保留向量地址偏移量BPHANTOM;保留向量地址偏移量BPHANTOM;保留向量地址偏移量BPHANTOM;保留向量地址偏移量BPHANTOM;-3FB B
;CANMBX_ISR;保留向量地址偏移量;保留向量地址偏移量-0041h;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~;(2)主程序.text_c_int0CALLSYSINIT;調(diào)系統(tǒng)初始化程序CALLKEYLEDINIT;LED初始化程序LDP#DP_USER;0280h~0300h區(qū)SPLK#01H,IOSFT_REG;寄存器和標(biāo)志初始化SPLK#00H,IO_COUNTSPLK#001H,IO_DATASPLK#001H,LEDXSSPLK#00H,LEDFLAG;LEDFLAG.0=1K1,K2,K3按下;LEDFLAG.0=0K4按下SPLK#01H,K1FLAGCLRCINTM;開(kāi)總中斷LOOP:CALLKEY;調(diào)鍵盤程序,即掃描鍵盤LDP#DP_USERBITLEDFLAG,15BCNDLEDBD1,TCLACLIO_COUNTSUB#03E8HBCNDWAIT,LEQ;10s延時(shí)到否LEDBD1:SPLK#00H,IO_COUNTLDP#DP_PF2LACLPFDATDIROR#0404H;IOPF2=1SACLPFDATDIR;74HC273片選信號(hào)LDP#DP_USERLACLLEDXSOR#0FF00H;IOPB口為輸出方式LDP#DP_PF2SACLPBDATDIR;IOPB口LACLPFDATDIRAND#0FFFBH;IOPF2=0SACLPFDATDIR;74HC273片選信號(hào)LDP#DP_USERBITLEDFLAG,15BCNDLEDBD2,TCLACLLEDXSSFLSACLLEDXSLACLIOSFT_REGSFLSACLIOSFT_REGBITIOSFT_REG,BIT8;判是否循環(huán)完一次BCNDLOOP1,TCBWAITLOOP1:LDP#DP_USERSPLK#01H,IOSFT_REG;賦初值LEDBD2:LACLIO_DATASACLLEDXSWAIT:NOPBLOOP;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~系統(tǒng)初始化程序SYSINIT:SETCCLRCCLRCCLRCLDPSPLKSPLKLDPSPLKSPLKLDPSPLK
INTMSXMOVMCNF#0E0H#81FEH,SCSR1#0E8H,WDCR#0#02H,IMR#0FFFFh,IFR#DP_EVA
;B0區(qū)被配置為數(shù)據(jù)空間;7000h~7080h區(qū);4倍頻,CLKIN=6M,CLKOUT=24M;WDT;INT2;清中斷標(biāo)志;7400h~7480h區(qū);T1PINT中斷SPLKSPLK
#0FFFFh,EVAIFRA ;EVA中斷標(biāo)志#0,GPTCONASPLK
#0EA6H,T1PR
;10ms產(chǎn)生一次中斷SPLKSPLKRET
#0,T1CNT#0164CH,T1CON ;1;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~鍵盤和發(fā)光二極管初始化程序KEYLEDINIT:LDPLACLANDSACLLACLANDSACLLACL
#DP_PF2MCRC#083FFHMCRCMCRA#000FFHMCRA
;IOPF2,IOPF[3~6]配置為一般的I/O口;IOPB[0~7]I/O口OR #0400H ;IOPF2為輸出方式ANDSACLLACLORSACLRET
#08787H#0FF00H
;IOPF[3~6]為輸入方式;IOPB[0~7]為輸出方式;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~鍵盤程序KEY:CALLLACLBCNDCALLCALLLACLBCND
READKEYKEYDATAKEYRET,EQKEYDELAYREADKEYKEYDATAKEYRET,EQ
;調(diào)讀鍵程序;ACC=0?;延時(shí)消抖動(dòng);再一次讀鍵值LDPBITBCND
#DP_USER ;判斷按鍵情況KEYDATA,15KEYRET,NTCKEYRET:
CALLBLACLANDSACLRET
K1KEYRETKEYDATA#0FFF0HKEYDATA
鍵按下;清讀取的鍵值寄存器;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~讀鍵子程序READKEY:LDP #DP_PF2LACLRPTSFRORCMPLLDP
#2#0FFF0H#DP_USER
;取出鍵值PFDATDIR.3~PFDATDIR.6;3位;4位(4個(gè)鍵)SACLRET
KEYDATA ;存放鍵值;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~KEYDELAY:KEYD1:
LACCSUBRPTNOPBCNDRET
#6000#1#80KEYD1,NEQ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~;(8)鍵子程序K1: ;"+"鍵子程序READK1: CALLCALLLDPBITBCNDSPLKLACLADDSACLRET
KEYDELAYREADKEY#DP_USERKEYDATA,15READK1,TC#01,LEDFLAGIO_DATA#1IO_DATA
;判斷按鍵K1是否松開(kāi);LED左移標(biāo)志,LED對(duì)同一個(gè)數(shù)不刷新;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~;(9)中斷程序GISR2:;保護(hù)現(xiàn)場(chǎng)
LDPSSTSSTSACLSACHSARSARSARSARSAR
#0#0,st0_temp#1,st1_tempcontextcontext+1AR1,context+2AR2,context+3AR3,context+4AR4,context+5AR5,context+6
;INT2中斷人口;保存機(jī)器上下文;DP-0;B2DARAM.;ACC16位;ACC16位LDPLACC
#0E0HPIVR,1 ;讀取外設(shè)中斷向量寄存器(PIVR),并左移一位T1GP_ISR:; 恢復(fù)現(xiàn)場(chǎng)
ADDBACCLDPLACLADDSACLLDPSPLKLDPLARLARLARLARLARLACCADDSLSTLST
#PVECTORS#DP_USERIO_COUNT#1IO_COUNT#DP_EVA#0AR5,context+6AR4,context+5AR3,context+4AR2,context+3AR1,context+2context+1,16context#1,st1_temp#0,st0_temp
;加上外設(shè)中斷入口地址;跳到相應(yīng)的中斷服務(wù)子程序;1中斷入口CLRCRET
INTM ;開(kāi)總中斷,因?yàn)橐贿M(jìn)中斷就自動(dòng)關(guān)閉總中斷;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~;(10)假中斷程序PHANTOMKICK_DOG
RETEND
;復(fù)位看門狗實(shí)驗(yàn)五 鍵盤和LED發(fā)光二極管顯示電路一.實(shí)驗(yàn)說(shuō)明在DSPI/OI/O端口的輸出點(diǎn)亮發(fā)光二極管,形成的鍵盤、LED4.1所示。二.實(shí)驗(yàn)?zāi)康膶W(xué)會(huì)配合使用鍵盤與發(fā)光二極管的編程方法。進(jìn)一步認(rèn)識(shí)TMS320LF2407芯片的I/O端口的功能及控制方法。三.實(shí)驗(yàn)內(nèi)容用TMS320LF240788種花樣顯示。給按鍵定義各種不同功能,以實(shí)現(xiàn)對(duì)發(fā)光二極管循環(huán)順序和點(diǎn)亮個(gè)數(shù)的控制。四.實(shí)驗(yàn)參考程序清單通過(guò)編程,使8只發(fā)光二極管實(shí)現(xiàn)如下顯示功能:按下K1鍵,可點(diǎn)亮8種不同組合的發(fā)光二極管花樣模式顯示,按8次為一個(gè)循環(huán)周期;當(dāng)按下一次K2鍵,將使設(shè)定的發(fā)光二1;當(dāng)按下一次K31位;當(dāng)按K4鍵或不按鍵時(shí),返回到循環(huán)點(diǎn)亮發(fā)光二極管模式。110ms10s延時(shí)。C程序I/O端口作為輸入和輸出使用源程序代碼:說(shuō)明,vectors.asm都是相同的。主程序//該程序用于鍵盤的識(shí)別,按鍵情況通過(guò)LED表示.#include "register.h"http://初始化子程序initial(){asm("setcSXM");asm("clrcOVM");asm("clrcCNF");*SCSR1=0x81FE;*WDCR=0x0E8;*IMR=0x0000;*IFR=0x0FFFF;*MCRA=*MCRA&0x0FF;*PBDATDIR=*PBDATDIR|0x0FF00;*MCRC=*MCRC&0x03FF;*PFDATDIR=*PFDATDIR|0x0400;*PBDATDIR=*PBDATDIR&0x0FF00;*PFDATDIR=*PFDATDIR|0x0404;*PFDATDIR=*PFDATDIR&0x0FFFB;//以上的操作產(chǎn)生一個(gè)脈沖,使LED全部熄滅}// 屏蔽中斷子程序void inline disable(){
//抑制符號(hào)位擴(kuò)展//累加器中結(jié)果正常溢出//B0被配置為數(shù)據(jù)存儲(chǔ)空間//CLKIN=6M,CLKOUT=4*CLKIN=24M//SCSR2WDOVERRIDE//WD1,故可以用//軟件禁止看門狗//禁止所有中斷"10"http://IOPBI/O功能//IOPB端口設(shè)置為輸出方式//IOPF2IOPF3~6配置為一般的I/O功能//IOPF2端口為輸出端口,IOPF3-IOPF6為輸入端口//LED燈//IOPF2IOPF2=1//IOPF2=0asm("setcINTM");}int keyscan(){intk,j; //定義局部變量k=*PFDATDIR&0x0078;//讀入鍵盤狀態(tài)并屏蔽掉相應(yīng)的位if(k==0x0078) k=0;else k=1;//k=1if(k==1)//若無(wú)鍵按下,則直接返回{for(j=30000;j>0;j--) j=j;//若有鍵按下,則延時(shí)消抖動(dòng)k=*PFDATDIR&0x0078;//讀入鍵盤狀態(tài)并屏蔽掉相應(yīng)的位if(k==0x0078) k=0;else k=1;//有還有鍵按下,則k=1}return(k);//K值}intkeyserve()//鍵服務(wù)子程序{int k;//定義局部變量k=*PFDATDIR&0x0078;//讀入鍵盤狀態(tài)并屏蔽掉相應(yīng)的位switch(k){case0x0070:*PBDATDIR=(*PBDATDIR&0xFF00)|0X0001;break;//K1鍵,則顯示"1"case0x0068:*PBDATDIR=(*PBDATDIR&0xFF00)|0X0002;break;//K2鍵,則顯示"2"case0x0058:*PBDATDIR=(*PBDATDIR&0xFF00)|0X0003;break;//K3鍵,則顯示"3"case0x0038:*PBDATDIR=(*PBDATDIR&0xFF00)|0X0004;break;//K4鍵,則顯示"4"}*PFDATDIR=*PFDATDIR|0x0404;*PFDATDIR=*PFDATDIR&0x0FFFB;//B端口的值顯示出來(lái)}main(){
//IOPF2IOPF2=1//IOPF2=0disable();initial();while(1){
//屏蔽所有中斷//系統(tǒng)初始化inti;i=0;i=keyscan();
//定義局部變量//鍵盤掃描,若有鍵按下,則返回值為"1",否則返回值為"0"if(i==1)}}
keyserve();
//如果有鍵按下,則進(jìn)行鍵服務(wù)程序//直接返回中斷服務(wù)子程序voidinterruptnothing(){return;}匯編程序st0_temp.usect".b20",1;60st1_temp.usect".b20",1;61contextSTACK ..usectusect".b20",7".stack",40;62-68IOSFT_REG.usect".data0",1;280;IOPBSHIFTREGIO_COUNT.usect".data0",1;281;IOCOUNTREGIO_DATA.usect".data0",1;282;I/O臨時(shí)數(shù)據(jù)緩沖區(qū)LEDXS.usect".data0",1;283;LED顯示的數(shù)據(jù)LEDFLAG.usect".data0",1;284;LED顯示標(biāo)志K1FLAGKEYDATA.KEYTIMERDP_USER.usectusect.usect.set".data0",1".data0",1".data0",15;285;286;287;K1標(biāo)志寄存器.include "F2407REGS.H".def_c_int0~~~~~~~~~~~~~~~~~~~~.sect~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~".vectors" ;定義主向量段RSVECTB_c_int0;PM0 ResetVector 1INT1BPHANTOM;GISR1 ;PM2 Intlevel14INT2BGISR2;PM4 Intlevel2 5INT3BPHANTOM;PM6 Intlevel3 6INT4BPHANTOM;PM8 Intlevel4 7INT5BPHANTOM;GISR5;PMAIntlevel5 8INT6BPHANTOM;PMCIntlevel69RESERVEDBPHANTOM;PME(AnalysisInt)10SW_INT8BPHANTOM;PM10UserS/Wint-SW_INT9BPHANTOM;PM12UserS/Wint-SW_INT10BPHANTOM;PM14UserS/Wint-SW_INT11BPHANTOM;PM16UserS/Wint-SW_INT12BPHANTOM;PM18UserS/Wint-SW_INT13BPHANTOM;PM1AUserS/Wint-SW_INT14SW_INT15SW_INT16TRAPBBBBPHANTOMPHANTOMPHANTOMPHANTOM;PM1C;PM1E;PM20;PM22UserS/WintUserS/WintUserS/WintTrapvector----NMIBPHANTOM;PM24NonmaskableInt3EMU_TRAPBPHANTOM;PM26EmulatorTrap2SW_INT20BPHANTOM;PM28UserS/Wint-SW_INT21BPHANTOM;PM2AUserS/Wint-SW_INT22BPHANTOM;PM2CUserS/Wint-SW_INT23BPHANTOM;PM2EUserS/Wint-SW_INT24BPHANTOM;PM30UserS/Wint-SW_INT25BPHANTOM;PM32UserS/Wint-SW_INT26BPHANTOM;PM34UserS/Wint-SW_INT27BPHANTOM;PM36UserS/Wint-SW_INT28BPHANTOM;PM38UserS/Wint-SW_INT29BPHANTOM;PM3AUserS/Wint-SW_INT30BPHANTOM;PM3CUserS/Wint-SW_INT31BPHANTOM;PM3EUserS/Wint-;===========================================================;pvecs;===========================================================.sect ".pvecs" ;定義子向量段PVECTORSBBBBBBBBBBBBBBBBBBBBB
PHANTOMPHANTOMPHANTOMPHANTOMPHANTOMPHANTOMPHANTOMPHANTOMPHANTOMPHANTOMPHANTOMPHANTOMPHANTOMPHANTOMPHANTOMPHANTOMPHANTOMPHANTOMPHANTOMPHANTOMPHANTOM
;保留向量地址偏移量-00;保留向量地址偏移量;保留向量地址偏移量;保留向量地址偏移量;保留向量地址偏移量;保留向量地址偏移量-05;SCI_RX_ISR ;保留向量地址偏移量;SCI_TX_ISR ;保留向量地址偏移量;保留向量地址偏移量;保留向量地址偏移量;保留向量地址偏移量-0a;保留向量地址偏移量;保留向量地址偏移量;保留向量地址偏移量;保留向量地址偏移量;保留向量地址偏移量;保留向量地址偏移量-10;保留向量地址偏移量;保留向量地址偏移量;保留向量地址偏移量;保留向量地址偏移量BPHANTOM;-15BPHANTOM;保留向量地址偏移量BPHANTOM;保留向量地址偏移量BPHANTOM;保留向量地址偏移量BPHANTOM;保留向量地址偏移量BPHANTOM;-1aBPHANTOM;保留向量地址偏移量BPHANTOM;保留向量地址偏移量BPHANTOM;保留向量地址偏移量BPHANTOM;保留向量地址偏移量BPHANTOM;保留向量地址偏移量BPHANTOM;-20BPHANTOM;保留向量地址偏移量BPHANTOM;保留向量地址偏移量BPHANTOM;保留向量地址偏移量BPHANTOM;保留向量地址偏移量BPHANTOM;-25BPHANTOM;保留向量地址偏移量BT1GP_ISR;保留向量地址偏移量-0027T1PINTBPHANTOM;保留向量地址偏移量BPHANTOM;保留向量地址偏移量BPHANTOM;-2aBPHANTOM;保留向量地址偏移量BPHANTOM;保留向量地址偏移量BPHANTOM;保留向量地址偏移量BPHANTOM;保留向量地址偏移量B PHANTOM ;pvectoraddroffset0x02f-T3PINTBPHANTOM;-30BPHANTOM;保留向量地址偏移量BPHANTOM;保留向量地址偏移量BPHANTOM;保留向量地址偏移量BPHANTOM;保留向量地址偏移量BPHANTOM;-35BPHANTOM;保留向量地址偏移量BPHANTOM;保留向量地址偏移量BPHANTOM;保留向量地址偏移量BPHANTOM;保留向量地址偏移量BPHANTOM;-3aBPHANTOM;保留向量地址偏移量BPHANTOM;保留向量地址偏移量BPHANTOM;保留向量地址偏移量BPHANTOM;保留向量地址偏移量BPHANTOM;-3fB PHANTOM ;CANMBX_ISR;保留向量地址偏移量B PHANTOM ;保留向量地址偏移量-41;程序段;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~;K1=IOPF3,K2=IOPF4,K3=IOPF5,K4=IOPF6,LED的片選信號(hào):IOP;48個(gè)發(fā)光二極管組合程序,再無(wú)鍵按下或K418個(gè)發(fā)光二極管;K1按下則為功能模式,按鍵的次數(shù)不同顯示的發(fā)光二極管也不同;K2按下則為“+”鍵模式,按一次加一,點(diǎn)亮不同的發(fā)光二極管;K3按下則為移位模式,按一次往右移一位,即LED7=LED6. LED1=LED0,LED0=LED7;注意LED顯示時(shí)要關(guān)閉LCD的塊選E1E2.text_c_int0
CALLCALL
INIT ;;;;KEYLEDINITLOOP:LEDBD1:
LDPSPLKSPLKSPLKSPLKSPLKSPLKCALLCALLLDPBITBCNDLACLSUBBCNDSPLK
#DP_USER#01H,IOSFT_REG#00H,IO_COUNT#001H,IO_DATA#001H,LEDXS#00H,LEDFLAG#01H,K1FLAGINIT_TIME1KEY#DP_USERLEDBD1,TCIO_COUNT#030HWAIT,LEQ#00H,IO_COUNT
;顯示數(shù)據(jù)移位寄存器;延時(shí)計(jì)數(shù)寄存器;I/O臨時(shí)數(shù)據(jù)緩沖區(qū);LED顯示的數(shù)據(jù)K1,K2,K3按下LEDFLAG.0=0K4按下;K1標(biāo)志寄存器LDPLACLORSACL
#DP_PF2#0004H
;IOPF21;74HC273片選信號(hào)LDP#DP_USERLACLLEDXSOR#0FF00H;IOPB是輸出LDP#DP_PF2SACLPBDATDIR;送要顯示的數(shù)據(jù)LDP#DP_PF2LACLPFDATDIRAND#0FFFBH;IOPF20SACLPFDATDIR;74HC273片選信號(hào)LDP#DP_USERBITLEDFLAG,15BCNDLEDBD2,TCLACLSFLSACLLEDXSLEDXS;要顯示的數(shù)左移一位LACLSFLSACLIOSFT_REGIOSFT_REGBITIOSFT_REG,BIT8;判是否循環(huán)完一次BCNDLOOP1,TCBWAITLOOP1:LDP#DP_USERLEDBD2:SPLKLACL#01H,IOSFT_REGIO_DATAWAIT:SACLLEDXSNOPBLOOPINIT:SETCINTM;系統(tǒng)初始化;關(guān)全局中斷CLRCSXM;抑止符號(hào)擴(kuò)展CLRCOVMCLRCCNF;B0配置為數(shù)據(jù)空間LDP#0E0HSPLK#81FEH,SCSR1;CLKIN=6M,CLKOUT=24MSPLKLDP#0E8h,WDCR#0;關(guān)閉看門狗WDTSPLK#0002h,IMR;使能interrupt2SPLK#0FFFFh,IFR;清中斷標(biāo)志RETINIT_TIME1:
LDPSPLK
#DP_EVA
;1初始化子程序;1周期中斷SPLK SPLKSPLKSPLKSPLKCLRCRET
#0,GPTCONA#0BBH,T1PR#00H,T1CNT#0174CH,T1CONINTM
1比較輸出;1ms產(chǎn)生一次中斷;1計(jì)數(shù)單元;TMODE=10(連續(xù)增模式),;TPS=111X/128,,CLOCK=Internal,1KEYLEDINIT:
LDPLACLANDSACLLACLANDSACL
#DP_PF2MCRC#083FFHMCRCMCRA#000FFHMCRA
;LED初始化子程序;IOPF2--IOPF6I/O口;IOPB[0-7]I/O口LACLOR
PFDATDIR#0400H IOPF2為輸出方式ANDSACLLACLSACL
#087FBH#0FF00H
;IOPF[3-6]為輸入方式;IOPB[0-7]為輸出方式RET;********************************************************************KEY:CALLLACLBCNDCALLCALL
READKEYKEYDATAKEYRET,EQKEYDELAYREADKEY
;讀鍵盤值;ACC=0?;KEYDATA0,表示有鍵按下,延時(shí)消抖動(dòng);鍵盤軟件延時(shí)子程序BCNDKEYRET,EQLDP#DP_USER;判斷按鍵情況(考慮只有一個(gè)鍵按下)BITKEYDATA,15BCNDKEY1,NTCCALLK1;KEY1功能鍵BKEYRETKEY1:BITKEYDATA,14BCNDKEY2,NTCCALLK2;KEY2"+"鍵BKEYRETKEY2:BITKEYDATA,13BCNDKEY3,NTCCALLK3;KEY3移位"鍵BKEYRETKEY3:BITKEYDATA,12;KEY4確認(rèn)鍵BCNDKEYRET,NTCCALLK4KEYRET:LACLKEYDATA;KEYDATA4位AND#0fff0hSACLKEYDATARET;*****************讀鍵盤子程序*******************************************READKEY:;判鍵盤狀態(tài)子程序LDP#DP_PF2;DP-->7080h-70FFhLACLPFDATDIR;取出鍵值PFDATDIR.3--PFDATDIR.6RPT#2SFR;3位OR#0fff0h;4位(4個(gè)鍵)CMPL;有鍵盤按下時(shí)對(duì)應(yīng)位為低,按位取反之后為高LDP#DP_USERSACLKEYDATA;KEYDATA中RETKEYDELAY:LACC#6000;86ms(20000)30mS(6000)KEYD1:
SUBRPTNOPBCNDLDP
#1 ;#080HKEYD1,NEQ#5RET********************功能鍵子程序*****************************K1:NOPREADK1:CALLREADKEYCALLKEYDELAYLDP#DP_USER;判斷按鍵K1是否松開(kāi)BITKEYDATA,15BCNDREADK1,TCLDP#DP_USER;可擴(kuò)展成16個(gè)或更多分支SPLK#01H,LEDFLAGBITK1FLAG,15BCNDGN_KEY1,TCBITK1FLAG,14BCNDGN_KEY2,TCBITK1FLAG,13BCNDGN_KEY3,TCBITK1FLAG,12BCNDGN_KEY4,TCBITK1FLAG,11BCNDGN_KEY5,TCBITK1FLAG,10BCNDGN_KEY6,TCBITK1FLAG,9BCNDGN_KEY7,TCBITK1FLAG,8BCNDGN_KEY8,TCBK1_RETGN_KEY1:GN_KEY2:GN_KEY3:GN_KEY4:GN_KEY5:
SPLK B K1_LOOP1SPLK B K1_LOOP1SPLK B K1_LOOP1SPLK B K1_LOOP1SPLK B K1_LOOP1
;K111H;K123H;K135H;K147H;K1511HGN_KEY6:SPLK#33H,IO_DATA;K1633HGN_KEY7:BSPLKK1_LOOP1#55H,IO_DATA;K1755HGN_KEY8:BSPLKK1_LOOP1#77H,IO_DATA;K1877HBK1_LOOP1K1_LOOP1:LACLK1FLAGSFLSACLK1FLAG;K1FLAG左移一位BITK1FLAG,7BCNDK1_LOOP2,TCBK1_RETK1_LOOP2:K1_RET:SPLKNOP#01H,K1FLAGRET;======="+"鍵子程序===========================K2:READK2:
NOPCALLCALLLDPBITBCND
READKEYKEYDELAY#DP_USERKEYDATA,14READK2,TC
;判斷按鍵K2是否松開(kāi)LDPSPLKLACLSACLRET
#DP_USER#01,LEDFLAGIO_DATAIO_DATA
;LED左移標(biāo)志,LED對(duì)同一個(gè)數(shù)不刷新;======="移位"鍵子程序===========================K3:NOPREADK3:CALLREADKEYCALLKEYDELAYLDP#DP_USER;判斷按鍵K3是否松開(kāi)BITKEYDATA,13BCNDREADK3,TCLDP#DP_USERSPLK#01H,LEDFLAGLACLSFRSACLIO_DATAIO_DATABCNDK3_LOOP1,NCLACL#80HADDIO_DATAK3_LOOP1:SACLIO_DATARET;=======確認(rèn)鍵子程序===========================K4:READK
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年空間站建設(shè)與運(yùn)營(yíng)合同
- 2024新疆瓜果種植戶與收購(gòu)商合作保障合同3篇
- 2024年項(xiàng)目授權(quán)代表協(xié)議3篇
- 助學(xué)貸款合同(2篇)
- 勞務(wù)派遣合同履行的監(jiān)督協(xié)議書
- 2024版施工方廉潔自律保障協(xié)議版B版
- 2024年采購(gòu)談判關(guān)鍵環(huán)節(jié)與協(xié)議執(zhí)行策略版B版
- 2024版衛(wèi)星通信技術(shù)研究合同
- 2024年財(cái)產(chǎn)貸款抵押協(xié)議版本3篇
- 二零二五年度個(gè)人借款合同書法律適用3篇
- 醫(yī)務(wù)人員外出進(jìn)修流程圖
- DB32∕T 2349-2013 楊樹(shù)一元立木材積表
- 昌樂(lè)二中271高效課堂培訓(xùn)與評(píng)價(jià)ppt課件
- 顫?。ㄅ两鹕。┲嗅t(yī)護(hù)理常規(guī)
- 豬場(chǎng)名詞及指標(biāo)講義
- 果膠項(xiàng)目商業(yè)計(jì)劃書(模板范本)
- 旋挖鉆成孔掏渣筒沉渣處理施工工藝
- T∕CHTS 10040-2021 公路無(wú)機(jī)結(jié)合料穩(wěn)定粒料基層振動(dòng)法施工技術(shù)指南
- 集團(tuán)后備人才培養(yǎng)方案
- 腦卒中偏癱患者早期康復(fù)護(hù)理現(xiàn)狀(一)
- 國(guó)家開(kāi)放大學(xué)電大本科《機(jī)電控制工程基礎(chǔ)》2023-2024期末試題及答案(試卷代號(hào):1116)
評(píng)論
0/150
提交評(píng)論