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