隨著DSP運(yùn)行速度越來越快和DSP芯片價格的越來越低,使DSP在各個領(lǐng)域的應(yīng)用也越來越廣泛。相比于常用的8031系列單片機(jī)來說,DSP的速度是8031的幾十倍。因此,以前要用工控機(jī)才能實(shí)現(xiàn)的系統(tǒng),現(xiàn)在便可以用DSP來實(shí)現(xiàn)了。 在Texas Instrument(美國德州儀器,簡稱TI)推出的系列DSP中,C2XX可以廣泛應(yīng)用于各種控制系統(tǒng)中,尤其適用于電機(jī)控制。在C2XX系列中,LF2406/LF2407是應(yīng)用比較廣泛的一種DSP芯片,它具有32k字的FLASH程序存儲器,可以通過串行口在線編程。片內(nèi)共有三部分內(nèi)存:其中60H-7FH共有32個字,200H-3FFH共有512個字,800H-0FFFH共有2048個字。 C2XX的內(nèi)存是按頁來組織的,訪問內(nèi)存要先指定頁指針(DP),然后在指令中再指定頁內(nèi)地址。每頁只有128個字,直接尋址指令只能訪問當(dāng)前頁內(nèi)的數(shù)據(jù)。C2XX系列芯片具有8個輔助寄存器(AR0~AR7),這8個輔助寄存器都是16位的,可以訪問64k的存儲器空間。因?yàn)樵谌魏纬绦蚱蝺?nèi)都有可能要臨時保存數(shù)據(jù),因此,為了不破壞頁指針,用輔助寄存器作為堆棧指針是比較方便的。根據(jù)8031的編程習(xí)慣,一般把AR0和AR1作為間接尋址指針,把AR6和AR7作為計(jì)數(shù)單元,因此將AR5作為堆棧指針,定義如下: SP.set AR5 由于C2XX的內(nèi)存是不連續(xù)的,因此,把軟件堆棧設(shè)在只有32字的60H-7FH段比較合適。因?yàn)橛?2個字再加上硬件堆棧本身的8個字,總共可以有40個字,這對絕大多數(shù)應(yīng)用來說已經(jīng)足夠了。 在實(shí)際應(yīng)用中,隨時都有可能要臨時保存數(shù)據(jù), 特別是在中斷程序中,要保存的內(nèi)容更多。中斷發(fā)生時硬件會自動保存當(dāng)前的執(zhí)行地址,然后跳轉(zhuǎn)到中斷向量所指的地址執(zhí)行,執(zhí)行完成后由RET指令返回到中斷發(fā)生前的地址繼續(xù)執(zhí)行。在中斷服務(wù)程序(ISR)中,一般都要保存ACC的值(32位)、當(dāng)前數(shù)據(jù)頁指針以及一些狀態(tài)位。 為了方便使用,首先應(yīng)定義兩個宏: 其中PushRegs用于保存寄存器的值,而PopRegs用于恢復(fù)寄存器的值。應(yīng)用舉例如下: 如將Timer 3作為一般的1ms定時器使用,那么,中斷服務(wù)程序如下: 因?yàn)樵撚布挥?級堆棧,所以在編寫程序時,應(yīng)盡量使用跳轉(zhuǎn)指令而少用CALL指令,這樣在中斷比較多的場合就不致于發(fā)生堆棧溢出。 |