《DSP器件及應(yīng)用》課件第2章_第1頁(yè)
《DSP器件及應(yīng)用》課件第2章_第2頁(yè)
《DSP器件及應(yīng)用》課件第2章_第3頁(yè)
《DSP器件及應(yīng)用》課件第2章_第4頁(yè)
《DSP器件及應(yīng)用》課件第2章_第5頁(yè)
已閱讀5頁(yè),還剩320頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

第2章TMS320‘C2000DSP的硬件結(jié)構(gòu)

2.1TMS320‘C2000的總線結(jié)構(gòu)2.2TMS320‘C2000的CPU結(jié)構(gòu)2.3TMS320‘C2000的存儲(chǔ)器與I/O空間2.4TMS320‘C2000的程序控制2.5TMS320‘C20x的片內(nèi)外設(shè)2.6TMS320‘C24xx的功能結(jié)構(gòu)2.7小結(jié)

TMS320‘C2000系列芯片是16位定點(diǎn)DSP芯片,屬于第二代定點(diǎn)DSP的衍生代產(chǎn)品,具有優(yōu)化的內(nèi)部結(jié)構(gòu)、更快的速度、更多的片內(nèi)資源及更小的體積和功耗,適合數(shù)字采集、快速控制、音頻等多種應(yīng)用。

TMS320C'2000DSP的體系結(jié)構(gòu)采用改進(jìn)型哈佛結(jié)構(gòu),其程序存儲(chǔ)器和數(shù)據(jù)存儲(chǔ)器分別獨(dú)立且有各自的總線結(jié)構(gòu)。TMS320'C2000系列芯片有3個(gè)主要的組成部分,即中央處理單元(CPU)、片內(nèi)存儲(chǔ)器和片內(nèi)外設(shè)。圖2.1為TMS320'C2000的內(nèi)部結(jié)構(gòu)框圖,圖中清晰地表明了CPU的結(jié)構(gòu)及CPU各部件之間的關(guān)系。所有的TMS320'C2000系列器件都采用同樣的中央處理單元、總線結(jié)構(gòu)和指令集,不同的器件則具有不同的片內(nèi)存儲(chǔ)器配置和片內(nèi)外設(shè)。圖2.1TMS320'C2000的內(nèi)部結(jié)構(gòu)框圖

2.1TMS320‘C2000的總線結(jié)構(gòu)

6條各自獨(dú)立的16位總線的總線結(jié)構(gòu)賦予TMS320’C2000DSP強(qiáng)大的內(nèi)部數(shù)據(jù)通信功能,使數(shù)據(jù)在各部件間交換順暢,并可在同一時(shí)鐘周期內(nèi)并發(fā)使用,從而得到優(yōu)越的性能。圖2.2給出了TMS320‘C2000DSP總線結(jié)構(gòu)框圖,TMS320’C2000內(nèi)部正是圍繞著這6條16位總線構(gòu)造的,分別介紹如下:

(1)?PAB(ProgramAddr.Bus):程序地址總線,提供讀/寫程序存儲(chǔ)器的地址。

(2)?DRAB(Data-ReadAddr.Bus):數(shù)據(jù)讀地址總線,提供讀數(shù)據(jù)存儲(chǔ)器的地址。

(3)?DWAB(Data-WriteAddr.Bus):數(shù)據(jù)寫地址總線,提供寫數(shù)據(jù)存儲(chǔ)器的地址。

(4)?PRDB(ProgramReadBus):程序讀總線,承載指令碼,傳送立即操作數(shù)及表信息,實(shí)現(xiàn)從程序存儲(chǔ)器到CPU的傳輸。圖2.2TMS320'C2000總線結(jié)構(gòu)框圖

(5)?DRDB(DataReadBus):數(shù)據(jù)讀總線,提供數(shù)據(jù)傳送通道,把源操作數(shù)從數(shù)據(jù)存儲(chǔ)器或程序存儲(chǔ)器傳送(讀入)到CPU(如中央算術(shù)邏輯單元CALU、硬件乘法器和輔助寄存器算術(shù)單元ARAU等)中。

(6)?DWEB(DataWriteBus):數(shù)據(jù)寫總線,提供數(shù)據(jù)傳送通道,把目標(biāo)操作數(shù)(或運(yùn)算結(jié)果)從CPU(如中央算術(shù)邏輯單元CALU、硬件乘法器和輔助寄存器算術(shù)單元ARAU等)傳送(寫出)到數(shù)據(jù)存儲(chǔ)器或程序存儲(chǔ)器中。

TMS320‘C2000總線結(jié)構(gòu)特點(diǎn)如下:

(1)采用各自獨(dú)立的數(shù)據(jù)地址總線分別用于讀數(shù)據(jù)(DRAB)和寫數(shù)據(jù)(DWAB),因此,CPU的讀和寫可在一個(gè)周期內(nèi)進(jìn)行。

(2)獨(dú)立的程序空間和數(shù)據(jù)空間允許CPU同時(shí)訪問程序指令和數(shù)據(jù)。

由以上的總線結(jié)構(gòu)特點(diǎn)可以看出:讀程序、讀數(shù)據(jù)和寫數(shù)據(jù)分別采用各自分開的地址總線及數(shù)據(jù)傳送總線,將取指、讀數(shù)據(jù)、寫數(shù)據(jù)分成3個(gè)不同的空間,這樣在1個(gè)時(shí)鐘周期內(nèi)可進(jìn)行訪問指令代碼、讀數(shù)據(jù)、保存運(yùn)算結(jié)果3種不同的操作,前提是程序代碼和讀/寫片內(nèi)數(shù)據(jù)存儲(chǔ)器不在同一區(qū)塊上,而程序置于片外也無(wú)妨。又因?yàn)锳RAU與CPU的其它運(yùn)算部件可并行運(yùn)作,所以在同一周期內(nèi)將產(chǎn)生出新的地址。這種并行機(jī)制可以支持在單個(gè)機(jī)器周期內(nèi)完成一組算術(shù)、邏輯、位操作運(yùn)算。例如,單周期乘累加指令(如MPYA)在1個(gè)周期里完成操作數(shù)(乘數(shù))的讀入、與被乘數(shù)(T寄存器值)的乘積、前次乘積與累加器值的累加、下次操作數(shù)地址的變更、后面指令代碼的讀入等多個(gè)操作,而在重復(fù)執(zhí)行的MACD指令里還要做一次當(dāng)前操作數(shù)向高存儲(chǔ)單元移位的操作。這種并行操作既離不開硬件乘法器和中央算術(shù)邏輯單元,又依賴于多總線結(jié)構(gòu)。

在這里需要指出的是,由于TMS320'C2000具有豐富的片內(nèi)存儲(chǔ)資源,為了減少其外部引腳和減小體積,將3套內(nèi)部總線合并為1套外部擴(kuò)展總線,分離的程序和數(shù)據(jù)空間在外存儲(chǔ)器中通過1套地址/數(shù)據(jù)總線分時(shí)復(fù)用,因此,同時(shí)使用外部擴(kuò)展程序/數(shù)據(jù)存儲(chǔ)器會(huì)降低TMS320'C2000DSP的性能。

2.2TMS320‘C2000的CPU結(jié)構(gòu)

CPU部分是DSP的核心,是整個(gè)芯片的指揮部件。所有的TMS320’C2000系列DSP都具有相同的CPU結(jié)構(gòu)。TMS320‘C2000DSP的CPU主要包括以下幾個(gè)部分:

(1)?32位中央算術(shù)邏輯單元CALU;

(2)?32位累加器ACC;

(3)用于CALU的輸入與輸出數(shù)據(jù)定標(biāo)移位器;

(4)?16位×16位硬件乘法器MUL;

(5)乘積比例移位器;

(6)數(shù)據(jù)地址產(chǎn)生邏輯,含8個(gè)輔助寄存器和1個(gè)輔助寄存器算術(shù)單元ARAU;

(7)程序地址產(chǎn)生邏輯。

TMS320'C2000CPU的運(yùn)算部件結(jié)構(gòu)如圖2.3所示。顯然,該CPU運(yùn)算部件包括以下3個(gè)主要部件:輸入定標(biāo)部分、乘法部分和中央算術(shù)邏輯部分。CPU的運(yùn)算部件是DSP最核心的部分,我們將對(duì)DSP的運(yùn)算部件進(jìn)行詳細(xì)介紹。數(shù)據(jù)地址發(fā)生器在CPU中是一個(gè)重要而較為獨(dú)立的單元部件,有必要專門作為一個(gè)小節(jié)討論;同樣,程序地址產(chǎn)生邏輯也將作為一個(gè)專門的部分,在程序控制一節(jié)講述。而CPU中的狀態(tài)寄存器ST0和ST1除提供運(yùn)算的標(biāo)志位外,還提供對(duì)整個(gè)DSP的工作模式、直接尋址等的控制,因此這部分也單列出來分析。圖2.3TMS320'C2000CPU的運(yùn)算部件2.2.1輸入定標(biāo)部分

32位輸入數(shù)據(jù)定標(biāo)移位器(ISCALE)的功能是把來自存儲(chǔ)器的16位數(shù)據(jù)左移0~16位變成32位送往中央算術(shù)邏輯單元(CALU),以與32位的CALU對(duì)齊。為了進(jìn)行數(shù)據(jù)的比例運(yùn)算和邏輯操作,這種對(duì)齊是必要的。作為程序或數(shù)據(jù)空間與CALU之間數(shù)據(jù)通路的一部分,輸入數(shù)據(jù)定標(biāo)移位器的操作無(wú)需額外的時(shí)鐘周期開銷。圖2.4示出了輸入數(shù)據(jù)定標(biāo)移位器的輸入、輸出和移位計(jì)數(shù)的關(guān)系。圖2.4輸入數(shù)據(jù)定標(biāo)移位器的輸入、輸出和移位計(jì)數(shù)的關(guān)系輸入數(shù)據(jù)定標(biāo)移位器(輸入移位器)的16位輸入來自于復(fù)工器MUX,而MUX根據(jù)指令代碼可選擇兩種來源的輸入:

(1)數(shù)據(jù)讀總線(DRDB),該輸入值來自于存放指令操作數(shù)的數(shù)據(jù)存儲(chǔ)器。

(2)程序讀總線(PRDB),該輸入值為指令操作數(shù)給出的常數(shù)值。

輸入數(shù)據(jù)定標(biāo)移位器的輸出則是經(jīng)移位后的32位輸出,和CALU已經(jīng)對(duì)齊,作為CALU運(yùn)算的一個(gè)輸入量。移位方式如下:

(1)均進(jìn)行左移:左移時(shí),沒有使用的低位LSB以0填充,而沒有用到的高位MSB則根據(jù)狀態(tài)寄存器ST1中的符號(hào)擴(kuò)展模式位(SXM)的設(shè)置情況決定填入0還是進(jìn)行符號(hào)擴(kuò)展。當(dāng)SXM?=?0時(shí),不做符號(hào)擴(kuò)展,此時(shí)未用到的高位(MSB)填入0;當(dāng)SXM?=?1時(shí),做符號(hào)擴(kuò)展,此時(shí)將輸入數(shù)據(jù)的符號(hào)位(最高位)擴(kuò)展到未用到的高位(MSB)上。這兩種情況下的移位操作分別如圖2.5和圖2.6所示。圖2.5SXM?=?0時(shí)輸入數(shù)據(jù)定標(biāo)移位器的操作圖2.6SXM?=?1時(shí)輸入數(shù)據(jù)定標(biāo)移位器的操作

(2)移位次數(shù)確定:該輸入移位器可做0~16位的左移操作,次數(shù)N可在指令中以常數(shù)的方式確定,也可以由T寄存器的低4位給出。而后者,由于T寄存器的值隨時(shí)可以修改(動(dòng)態(tài)確定),因此更能滿足系統(tǒng)的性能要求。2.2.2乘法部分

借助于16位×16位的硬件乘法器,TMS320‘C2000系列DSP可以在一個(gè)周期內(nèi)完成帶符號(hào)數(shù)或無(wú)符號(hào)數(shù)的2的補(bǔ)碼的乘法運(yùn)算。圖2.7給出了乘法部件的示意圖??梢?,硬件乘法器包括4個(gè)部件,即T寄存器(TREG)、乘法器、P寄存器(PREG)和乘積移位器(ProductShifter)。圖2.7TMS320'C2000CPU的乘法部件

(1)?T寄存器(TREG):16位的暫存寄存器,用來保存乘法運(yùn)算中的其中一個(gè)乘數(shù)。此外,它也可作為輸入移位器的移位次數(shù)。T寄存器可直接加載。

(2)乘法器:16位×16位,結(jié)果為32位,單周期完成。其中,一個(gè)16位輸入值為T寄存器內(nèi)容,T寄存器在乘法實(shí)現(xiàn)之前預(yù)先加載。另一個(gè)16位輸入值為來自于數(shù)據(jù)存儲(chǔ)器的直接/間接尋址的操作數(shù),或來自于程序存儲(chǔ)器的立即操作數(shù)。乘積結(jié)果送到32位P寄存器中。

(3)P寄存器(PREG):32位的乘積寄存器,用來保存32位乘積結(jié)果,也可預(yù)先加載而提供乘累加指令的初值,這樣就可避免由于初值的不確定而出現(xiàn)的混亂。輸出時(shí)其值被復(fù)制到乘積移位器。

(4)乘積移位器(ProductShifter):通過乘積移位器對(duì)32位乘積結(jié)果先進(jìn)行定標(biāo)移位,然后再將全部的32位送進(jìn)CALU去累加,或經(jīng)指令SPH(或SPL)將乘積移位器的高位字或低位字分別保存到數(shù)據(jù)存儲(chǔ)器中。乘積移位器有4種移位模式,由狀態(tài)寄存器ST1中的乘積移位模式位(PM)的設(shè)置情況決定,如表2.1所示。

利用乘法器、TREG和PREG,TMS320'C2000可高效地實(shí)現(xiàn)基本的DSP運(yùn)算,如卷積、相關(guān)和濾波等。每條乘法指令有效的執(zhí)行時(shí)間短至一個(gè)CPU周期。

表2.1乘積移位器的移位模式注:Q31格式是一種二進(jìn)制小數(shù)格式,該格式是在二進(jìn)制小數(shù)點(diǎn)的后面有31位二進(jìn)制數(shù)。2.2.3中央算術(shù)邏輯部分

中央算術(shù)邏輯部分為CPU中使用次數(shù)最多的運(yùn)算部件,包括中央算術(shù)邏輯單元(CALU)、累加器(ACC)和輸出移位器(OutputShifter)3個(gè)部分。圖2.8為中央算術(shù)邏輯部分示意圖。圖2.8TMS320'C2000CPU的中央算術(shù)邏輯部分

1.中央算術(shù)邏輯單元(CALU)

CALU的功能是完成各種算術(shù)運(yùn)算和邏輯操作,包括16位加法運(yùn)算、16位減法運(yùn)算、布爾邏輯操作、位操作(位測(cè)試、移位和循環(huán)移位,其中移位和循環(huán)移位由ACC完成)。這些操作大多數(shù)可在單周期內(nèi)完成。

CALU的輸入為ACC和一個(gè)操作數(shù),該操作數(shù)可來自于輸入移位器(InputShifter)或乘積移位器(ProductShifter),由不同的指令來選取。

CALU的輸出直接送ACC,再通過輸出移位器送數(shù)據(jù)存儲(chǔ)器保存。

CALU中的大多運(yùn)算受符號(hào)擴(kuò)展模式位SXM的影響,當(dāng)SXM?=?0時(shí),進(jìn)行無(wú)符號(hào)數(shù)運(yùn)算操作;當(dāng)SXM?=?1時(shí),進(jìn)行有符號(hào)數(shù)運(yùn)算操作,要做符號(hào)擴(kuò)展。

2.累加器(ACC)

累加器ACC的功能是存儲(chǔ)CALU的操作結(jié)果,它可分為高16位部分(ACCH)和低16位部分(ACCL)。在ACC中可完成移位和循環(huán)移位(包含進(jìn)位位)的位操作,以實(shí)現(xiàn)數(shù)據(jù)的定標(biāo)或邏輯位的測(cè)試控制。與ACC關(guān)聯(lián)的狀態(tài)位有以下4個(gè):

(1)進(jìn)位位(C):當(dāng)CALU進(jìn)行加法或減法運(yùn)算時(shí),若相加不產(chǎn)生進(jìn)位或相減產(chǎn)生借位,則C被復(fù)位(C?=?0)(例外:高16位加指令若相加不產(chǎn)生進(jìn)位,則不影響C);若相加產(chǎn)生進(jìn)位或相減不產(chǎn)生借位,則C被置位(C?=?1)(例外:高16位減指令若相減不產(chǎn)生借位,則不影響C)。另外,ACC做位操作時(shí),左移或循環(huán)左移,ACC的最高位進(jìn)入C,且循環(huán)左移時(shí)C進(jìn)入ACC的最低位;右移或循環(huán)右移,ACC的最低位進(jìn)入C,且循環(huán)右移時(shí)C進(jìn)入ACC的最高位。

(2)溢出模式位(OVM):決定ACC進(jìn)行運(yùn)算時(shí)產(chǎn)生溢出的方式。當(dāng)OVM?=?0時(shí),正常溢出;當(dāng)OVM?=?1時(shí),極值溢出(正溢出為7FFFFFFFh;負(fù)溢出為80000000h)。

(3)溢出標(biāo)志位(OV):運(yùn)算時(shí)若累加器不產(chǎn)生溢出,則清零(OV?=?0);若產(chǎn)生溢出(不管是正溢出還是負(fù)溢出),則置位(OV?=?1)。

(4)測(cè)試/控制標(biāo)志位(TC):根據(jù)測(cè)試指令及被測(cè)位的值設(shè)置TC為0或1。

3.輸出移位器(OutputShifter)

輸出移位器(或稱為輸出數(shù)據(jù)定標(biāo)移位器)的32位輸入接累加器的32位輸出,而其16位輸出接到寫數(shù)據(jù)總線。該輸出移位器的功能是首先拷貝累加器的32位值,然后對(duì)其左移,移位時(shí)高位丟棄,低位補(bǔ)0。具體移位數(shù)由指令指定,可移動(dòng)0~7位。最后將移位器中的高位字或低位字保存到數(shù)據(jù)存儲(chǔ)器中(用SACH指令可保存ACC高位字,用SACL指令可保存ACC低位字),而累加器的內(nèi)容保持為移位前的值不變。圖2.9和圖2.10分別表示了這兩種關(guān)系。移位不單獨(dú)占用周期。圖2.9移位并保存ACC高位字圖2.10移位并保存ACC低位字2.2.4輔助寄存器算術(shù)單元(ARAU)和輔助寄存器

CPU還有一個(gè)與中央算術(shù)邏輯單元(CALU)無(wú)關(guān)的算術(shù)單元,這就是輔助寄存器算術(shù)單元(ARAU)。ARAU的主要功能是對(duì)8個(gè)16位輔助寄存器(AR7~AR0)執(zhí)行算術(shù)運(yùn)算,該操作可與CALU中的操作并行進(jìn)行。圖2.11提供了ARAU及相關(guān)邏輯的結(jié)構(gòu)示意圖。圖2.11TMS320'C2000CPU的ARAU及相關(guān)邏輯的結(jié)構(gòu)示意圖

8個(gè)輔助寄存器(AR7~AR0)提供了靈活而有效的間接尋址(后續(xù)章節(jié)將專門討論),此時(shí)ARAU可用來產(chǎn)生數(shù)據(jù)存儲(chǔ)器地址。通過輔助寄存器中的16位地址可以訪問64KW數(shù)據(jù)存儲(chǔ)器地址空間的任意單元。

狀態(tài)寄存器中有兩個(gè)專用的3位(bit15~bit13),分別用做輔助寄存器指針(ARP)和輔助寄存器指針緩沖器(ARB)。ARP用于選擇8個(gè)輔助寄存器中的其中一個(gè),ARP?=?0時(shí)選擇AR0,ARP?=?1時(shí)選擇AR1,…,ARP?=?7時(shí)選擇AR7。被ARP選中的輔助寄存器稱為當(dāng)前輔助寄存器。ARP可通過指令直接加載或修改,也可通過間接尋址的輔助操作來修改或加載。ARB為ARP的緩沖寄存器,它總是復(fù)制當(dāng)前ARP的值,其用途主要是避免狀態(tài)寄存器進(jìn)、出軟堆棧時(shí)破壞ARP。

ARAU的輸出有3條通道。當(dāng)處理一條指令時(shí),當(dāng)前AR的內(nèi)容用做訪問數(shù)據(jù)存儲(chǔ)器的地址。如果是讀數(shù)據(jù)指令,ARAU就把該地址送到數(shù)據(jù)讀地址總線(DRAB);如果是寫數(shù)據(jù)指令,ARAU就把該地址送到數(shù)據(jù)寫地址總線(DWAB)。指令執(zhí)行完后,當(dāng)前AR的內(nèi)容通過ARAU進(jìn)行無(wú)符號(hào)的算術(shù)運(yùn)算,從而被更新。當(dāng)需保存某個(gè)輔助寄存器(ARx)的值時(shí),便接通數(shù)據(jù)寫總線(DWEB)。

ARAU對(duì)ARx進(jìn)行運(yùn)算以產(chǎn)生指令所要求的地址,其運(yùn)算包括以下幾種情況:

(1)對(duì)輔助寄存器線性增量或減量:+/-1或+/-AR0;

(2)對(duì)輔助寄存器加一個(gè)常數(shù)或減去一個(gè)常數(shù),該常數(shù)為8位常數(shù);

(3)把AR0的內(nèi)容與當(dāng)前AR的內(nèi)容進(jìn)行比較(CMPR指令),結(jié)果影響TC標(biāo)志(通過DWEB修改狀態(tài)寄存器ST1中的TC位)。通常ARAU在流水線的譯碼階段(指定操作的指令正在被譯碼時(shí))進(jìn)行它的算術(shù)運(yùn)算,這就能在下條指令譯碼之前產(chǎn)生地址。有一例外情況,就是在處理NORM指令時(shí),在流水線的執(zhí)行階段修改輔助寄存器和/或ARP。

輔助寄存器除用來產(chǎn)生數(shù)據(jù)存儲(chǔ)器地址外,還有其它用途。例如:①通過CMPR指令,使輔助寄存器支持條件分支、調(diào)用和返回,即上面的(3)運(yùn)算;②當(dāng)做通用寄存器或軟件計(jì)數(shù)器使用。2.2.5狀態(tài)寄存器ST0與ST1

兩個(gè)16位的狀態(tài)寄存器ST0、ST1是用來表明操作的當(dāng)前狀態(tài)和操作控制的。它們既可保存在數(shù)據(jù)存儲(chǔ)器中,也可由數(shù)據(jù)存儲(chǔ)器來加載。因此可用指令對(duì)這兩個(gè)寄存器進(jìn)行讀和寫,從而可保存或恢復(fù)子程序的操作/執(zhí)行狀態(tài)。

用LST(加載狀態(tài)寄存器)指令可對(duì)ST0和ST1進(jìn)行寫(INTM位除外,它不受LST的影響),而用SST(保存狀態(tài)寄存器)指令可對(duì)ST0和ST1進(jìn)行讀并保存。可用SETC或CLRC指令對(duì)ST1、ST2中的某些位單獨(dú)置位或清零。例如,可用SETCSXM指令將符號(hào)擴(kuò)展模式置1,用CLRCSXM將其清0,而其它位不受影響。圖2.12和圖2.13分別給出了狀態(tài)寄存器ST0、?ST1各位的定義。其中有些位是保留的(陰影部分),讀出時(shí)為1,寫入時(shí)不受影響。R表示可讀,W表示可寫,-x表示不受復(fù)位影響,-0表示復(fù)位時(shí)清零,-1表示復(fù)位時(shí)置位。圖2.12狀態(tài)寄存器ST0各位的定義圖2.13狀態(tài)寄存器ST1各位的定義

1.狀態(tài)寄存器ST0

狀態(tài)寄存器ST0各位的功能介紹如下:

●?D15~D13

ARP——輔助寄存器指針(AuxiliaryRegisterPointer)。在間接尋址模式中該位用于選擇當(dāng)前使用的輔助寄存器AR0~AR7。使用MAR指令、LST指令和間接尋址訪問存儲(chǔ)器指令可以加載ARP。當(dāng)ARP被裝載時(shí),先前的ARP值被復(fù)制到ARB緩沖器中(LST指令除外)。

●?D12

OV——溢出標(biāo)志位(OverflowFlagBit)。OV=1,表示CALU運(yùn)算發(fā)生了溢出。溢出時(shí),OV位保持置位狀態(tài),直到被復(fù)位指令、條件轉(zhuǎn)移指令或LST指令清0?!?D11

OVM——溢出模式位(OverflowModeBit)。OVM決定當(dāng)CALU發(fā)生溢出時(shí)的處理方式。當(dāng)累加器處于溢出方式(OVM?=?1)且發(fā)生溢出時(shí),產(chǎn)生下面兩種情況:

(1)溢出方向?yàn)檎?正向溢出),累加器被最大正數(shù)(7FFFFFFFh)填充。

(2)溢出方向?yàn)樨?fù)(負(fù)向溢出),累加器被最小負(fù)數(shù)(80000000h)填充。

當(dāng)OVM=0時(shí),按正常情況處理累加器,用SETCOVM或CLRCOVM指令可將該位置1或清0,LST指令可修改OVM。●?D9

INTM——中斷模式位(InterruptModeBit)。該位用來允許或禁止所有的可屏蔽中斷。INTM?=?0,使能所有可屏蔽中斷;INTM?=?1,禁止所有可屏蔽中斷。

用SETCINTM或CLRCINTM指令可對(duì)該位置1或清0;?LST指令不能影響INTM位;INTM不影響不可屏蔽中斷、復(fù)位以及軟件啟動(dòng)的中斷;發(fā)生中斷(TRAP指令除外)及復(fù)位時(shí)INTM置1。

●?D8~D0

DP——數(shù)據(jù)存儲(chǔ)器頁(yè)指針(DataPagePointer)。當(dāng)一條指令采用直接尋址方式時(shí),這個(gè)9位的DP字段與指令中的低7位拼接起來形成數(shù)據(jù)存儲(chǔ)器的16位地址。

2.狀態(tài)寄存器ST1

狀態(tài)寄存器ST1各位的功能介紹如下:

●?D15~D13

ARB——輔助寄存器指針緩存器(AuxiliaryRegisterPointerBuffer)。除LST指令外,每當(dāng)加載輔助寄存器指針(ARP)時(shí),ARP原來的值就拷貝到ARB。當(dāng)用LST指令加載ARB時(shí),同樣的值也拷貝到ARP。

●?D12

CNF——片內(nèi)DARAM配置位(On-chipDARAMConfigurationBit)。該位決定可配置的雙訪問RAM(B0)塊映射到數(shù)據(jù)空間(CNF?=?0)還是映射到程序空間(CNF?=?1)。SETCCNF或CLRCCNF可對(duì)該位置1或清0,復(fù)位時(shí)CNF?=?0。●?D11

TC——測(cè)試/控制標(biāo)志位(Test/ControlFlagBit)。TC在以下情況下置1:由BIT或BITT測(cè)試的位是1時(shí)置1;被CMPR測(cè)試的當(dāng)前輔助寄存器和AR0之間的比較條件成立時(shí)置1;用NORM指令測(cè)試時(shí),累加器最高兩位異或結(jié)果為1(相異)時(shí)置1。LST指令可改變TC值。

●?D10

SXM——符號(hào)擴(kuò)展模式位(InterruptModeBit)。若SXM?=?0,禁止符號(hào)擴(kuò)展;若SXM?=?1,則移位時(shí)進(jìn)行符號(hào)擴(kuò)展。某些指令不受SXM的控制,例如ADDS指令,不管SXM如何,都禁止符號(hào)擴(kuò)展。SETCSXM或CLRCSXM指令將該位置1或清0,通過LST指令可對(duì)其加載,復(fù)位時(shí)SXM置1。

●?D9

C——進(jìn)位位(CarryBit)。C?=?0時(shí),相減有借位或相加無(wú)進(jìn)位;C?=?1時(shí),相加有進(jìn)位或相減無(wú)借位。

累加器的值循環(huán)移動(dòng):左移時(shí),最高位進(jìn)入C;右移時(shí),最低位進(jìn)入C。用SETC、CLRC、LST指令可影響C,復(fù)位時(shí)C位置1?!?D4

XF——XF引腳狀態(tài)位(XFPinStatusBit)。SETCXF將XF置1,CLRC將XF清0,LST指令可修改XF,復(fù)位時(shí)XF置1。

●?D1~D0

PM——乘積移位模式(ProductShiftMode)。PM決定乘積寄存器(PREG)的值在送往CALU或數(shù)據(jù)存儲(chǔ)器時(shí)如何進(jìn)行移位。移位模式見表2.1。復(fù)位時(shí)PM置00。2.2.6系統(tǒng)配置寄存器

TMS320‘C20x器件沒有系統(tǒng)配置寄存器。TMS320LF/LC240x的系統(tǒng)配置寄存器包括兩個(gè)系統(tǒng)控制和狀態(tài)寄存器(SCSR1和SCSR2),這兩個(gè)寄存器均為存儲(chǔ)器映射寄存器,它們分別對(duì)TMS320’C240x的系統(tǒng)信號(hào)和片內(nèi)外設(shè)模塊進(jìn)行選擇配置。

1.系統(tǒng)控制和狀態(tài)寄存器1(SCSR1)——地址7018h

圖2.14為SCSR1各位的定義,其中各符號(hào)的意義同圖2.12和圖2.13,圖2.15也是如此。圖2.14SCSR1各位的定義

SCSR1各位的功能如下:

●?D15

Reserved——保留位。

●?D14

CLKSRC——CLKOUT引腳時(shí)鐘源選擇位。CLKSRC為0時(shí),CLKOUT引腳輸出CPU時(shí)鐘;CLKSRC為1時(shí),CLKOUT引腳輸出看門狗時(shí)鐘WDCLK。

●?D13~D12

LPM——低功耗模式選擇位,指明CPU在執(zhí)行IDLE指令時(shí)芯片進(jìn)入哪一種低功能模式。LPM1、LPM0的狀態(tài)及對(duì)應(yīng)的低功耗模式如下:

LPM1LPM0 模式

0 0 IDLE1(LMP0)模式

0 1 IDLE2(LPM1)模式

1 x HALT(LPM2)模式

●?D11~D9

CLKPS——PLL時(shí)鐘預(yù)定標(biāo)選擇位,這3位對(duì)輸入時(shí)鐘頻率fin選擇PLL倍頻系數(shù),其狀態(tài)及對(duì)應(yīng)的系統(tǒng)時(shí)鐘頻率如下:

CLKPS2

CLKPS1 CLKPS0 系統(tǒng)時(shí)鐘頻率

0 0

0

4×fin

0 0

1

2×fin

0 1

0

1.33×fin

0 1

1

1×fin

1 0

0

0.8×fin

1 0

1

0.66×fin

1 1

0

0.57×fin

1 1

1

0.5×fin

●?D8

Reserved——保留位?!?D7

ADCCLKEN——模/數(shù)轉(zhuǎn)換(ADC)模塊時(shí)鐘使能控制位。該位為0時(shí),禁止ADC模塊的時(shí)鐘;該位為1時(shí),使能ADC模塊的時(shí)鐘,且正常運(yùn)行。

●?D6

SCICLKEN——串行通信接口(SCI)模塊時(shí)鐘使能控制位。該位為0時(shí),禁止SCI模塊的時(shí)鐘;該位為1時(shí),使能SCI模塊的時(shí)鐘,且正常運(yùn)行。

●?D5

SPICLKEN——串行外設(shè)接口(SPI)模塊時(shí)鐘使能控制位。該位為0時(shí),禁止SPI模塊的時(shí)鐘;該位為1時(shí),使能SPI模塊的時(shí)鐘,且正常運(yùn)行。●?D4

CANCLKEN——控制器局域網(wǎng)(CAN)模塊時(shí)鐘使能控制位。該位為0時(shí),禁止CAN模塊的時(shí)鐘;該位為1時(shí),使能CAN模塊的時(shí)鐘,且正常運(yùn)行。

●?D3

EVBCLKEN——事件管理器B(EVB)模塊時(shí)鐘使能控制位。該位為0時(shí),禁止EVB模塊的時(shí)鐘;該位為1時(shí),使能EVB模塊的時(shí)鐘,且正常運(yùn)行。

●?D2

EVACLKEN——事件管理器A(EVA)模塊時(shí)鐘使能控制位。該位為0時(shí),禁止EVA模塊的時(shí)鐘;該位為1時(shí),使能EVA模塊的時(shí)鐘,且正常運(yùn)行。●?D1

Reserved——保留位。

●?D0

ILLADR——無(wú)效地址檢測(cè)位。當(dāng)檢測(cè)到一個(gè)無(wú)效地址時(shí),該位被置1。被置1后該位需要通過用戶軟件清0。向該位寫1可將其清0。在初始化程序中應(yīng)將該位清0。檢測(cè)到一個(gè)非法地址時(shí)將會(huì)產(chǎn)生一個(gè)不可屏蔽中斷(NMI)。

2.系統(tǒng)控制和狀態(tài)寄存器2(SCSR2)——地址7019h

圖2.15為SCSR2各位的定義。

SCSR2各位的功能如下:

●?D15~D7

Reserved——保留位。圖2.15SCSR2各位的定義●?D6

I/PQUAL——輸入時(shí)鐘限定器,用來限定輸入到CAP1~6、XINT1~2、ADCSOC及PDPINTA/B引腳上的信號(hào)被正確鎖存需要的最小脈沖寬度,引腳內(nèi)部的輸入狀態(tài)只有在脈沖達(dá)到這個(gè)寬度之后才改變。當(dāng)這些引腳作為I/O功能使用時(shí),該位無(wú)效。

D6 輸入時(shí)鐘限定

0至少5個(gè)時(shí)鐘周期

1至少11個(gè)時(shí)鐘周期

該位僅針對(duì)240xA器件,不針對(duì)240x器件?!?D5

WDOVERRIDE——WD保護(hù)位。復(fù)位后為1,向該位寫1可將其清0。但不能通過軟件使該位為1。該位用來控制是否允許用戶用軟件禁止WD工作(將程序監(jiān)視控制器寄存器WDCR中的WDDIS位置1)。當(dāng)該位為0時(shí),用戶不能通過軟件來禁止WD;當(dāng)該位為1時(shí),復(fù)位值,用戶可以通過軟件來禁止WD工作。

●?D4

XMIFHi-Z——外部存儲(chǔ)器接口信號(hào)(XMIF)高阻控制位。當(dāng)該位為0時(shí),所有XMIF信號(hào)為正常驅(qū)動(dòng)模式;當(dāng)該位為1時(shí),所有XMIF信號(hào)為高阻態(tài)。●?D3

引導(dǎo)ROM使能位。該位反映了/XF引腳在復(fù)位時(shí)的狀態(tài),該位可被軟件改變。當(dāng)該位為0時(shí),使能引導(dǎo)ROM,地址空間0000h~00FFh被片內(nèi)引導(dǎo)ROM塊占用。該方式禁止使用Flash存儲(chǔ)器。當(dāng)該位為1時(shí),禁止引導(dǎo)ROM,對(duì)TMS320LF2407A和TMS320LF2406A片內(nèi)Flash程序存儲(chǔ)器映射地址范圍為0000h~7FFFh,對(duì)TMS320LF2402A地址范圍為0000h~1FFFh?!?D2

微處理器/微控制器選擇位。該位反映了器件復(fù)位時(shí)引腳上的狀態(tài)。復(fù)位之后,可通過軟件來改變這一位以控制存儲(chǔ)器映射到片內(nèi)或片外。當(dāng)該位為0時(shí),器件設(shè)置為微控制器方式,程序地址0000h~7FFFh被映射到片內(nèi)(即Flash);當(dāng)該位為1時(shí),器件設(shè)置為微處理器方式,程序地址0000h~7FFFh被映射到片外(用戶需提供外部存儲(chǔ)器)。

●?D1~D0

DONPON——程序/數(shù)據(jù)空間選擇位。 DON

PON SARAM狀態(tài)

0 0 地址空間不被映射,該空間被分

配到外部存儲(chǔ)器

0 1 SARAM被映射到片內(nèi)程序空間

1 0 SARAM被映射到片內(nèi)數(shù)據(jù)空間

1 1 SARAM既被映射到片內(nèi)程序空

間又被映射到片內(nèi)數(shù)據(jù)空間

2.3TMS320‘C2000的存儲(chǔ)器與I/O空間

TMS320'C2000DSP的存儲(chǔ)器結(jié)構(gòu)基于改進(jìn)型哈佛結(jié)構(gòu),采用獨(dú)立的程序存儲(chǔ)器、數(shù)據(jù)存儲(chǔ)器和I/O空間,即它們可以有相同的地址,而它們的訪問通過控制線來區(qū)分。除此之外,數(shù)據(jù)存儲(chǔ)器還分為局部數(shù)據(jù)存儲(chǔ)器和全局?jǐn)?shù)據(jù)存儲(chǔ)器,這二者也可共用相同的地址空間,它們的訪問除了通過不同的控制線來區(qū)分以外,還受全局存儲(chǔ)器分配寄存器(GREG)的控制。程序、數(shù)據(jù)、I/O這三個(gè)存儲(chǔ)空間可以通過三組16位并行地址總線(PAB、DRAB、DWAB)來訪問。其中的任意一組可訪問不同的空間,以實(shí)現(xiàn)不同的器件操作。由于總線工作是分離的,因此可以同時(shí)訪問程序和數(shù)據(jù)空間。在一個(gè)給定的機(jī)器周期內(nèi),CALU可以執(zhí)行多達(dá)3次的并行存儲(chǔ)器操作。由此可以看出,TMS320‘C2000的224KW尋址空間分為以下四種可獨(dú)立選擇的空間:

(1)?64KW的程序存儲(chǔ)器空間,存放要執(zhí)行的指令及程序執(zhí)行時(shí)使用的數(shù)據(jù)。

(2)?64KW的局部數(shù)據(jù)存儲(chǔ)器空間,存放指令使用的數(shù)據(jù)。

(3)?32KW的全局?jǐn)?shù)據(jù)存儲(chǔ)器空間(通過擴(kuò)展得到),存放與其它處理器共用的數(shù)據(jù),或者作為一個(gè)附加的數(shù)據(jù)空間。局部數(shù)據(jù)空間中的高32KW地址(8000h~FFFFh)可作為全局?jǐn)?shù)據(jù)空間。局部數(shù)據(jù)存儲(chǔ)器和全局?jǐn)?shù)據(jù)存儲(chǔ)器可以是兩個(gè)不同的物理存儲(chǔ)器,通過修改GREG的內(nèi)容來控制當(dāng)前使用何種數(shù)據(jù)存儲(chǔ)器。

(4)?64KW的I/O訪問空間,用于與外部的設(shè)備接口和尋址片內(nèi)外設(shè)寄存器。

上述224KW尋址空間包括一定數(shù)量的片內(nèi)存儲(chǔ)器、外部存儲(chǔ)器和I/O設(shè)備,而其物理存儲(chǔ)器類型又可以是RAM、ROM、Flash等。事實(shí)上,由于芯片中有些空間作為專用空間,而有些空間則保留以備日后升級(jí)用,例如程序空間中中斷向量表要占用部分存儲(chǔ)空間,數(shù)據(jù)空間中有專用的內(nèi)存映射寄存器和保留段,而I/O空間中有專用的I/O空間映射寄存器和保留段,因此實(shí)際可用地址空間不足224KW。2.3.1與外部存儲(chǔ)器和I/O空間接口的信號(hào)

表2.2給出了與外部存儲(chǔ)器和I/O空間接口的信號(hào)。微處理器/微計(jì)算機(jī)選擇信號(hào)決定工作模式。當(dāng)使用外部程序存儲(chǔ)空間時(shí),DSP可工作在兩種模式下:高電平為微處理器模式,此時(shí)內(nèi)部程序ROM/Flash不可用;低電平為微計(jì)算機(jī)模式,內(nèi)外存儲(chǔ)器共用程序存儲(chǔ)空間。當(dāng)只使用內(nèi)部存儲(chǔ)空間時(shí),DSP工作在微計(jì)算機(jī)模式,此時(shí)應(yīng)置為低電平。I/O操作與此信號(hào)無(wú)關(guān)。表2.2與外部存儲(chǔ)器和I/O空間接口的信號(hào)注:表中電特性一欄中,“I”表示輸入,“O”表示輸出,“Z”表示高阻Hiz。不管使用何種工作模式,當(dāng)CPU使用內(nèi)部資源時(shí),相應(yīng)的對(duì)外控制信號(hào)會(huì)變?yōu)楦咦琛@缡褂脙?nèi)部程序存儲(chǔ)器時(shí),地址總線A15~A0、數(shù)據(jù)總線D15~D0變?yōu)楦咦鐷iz,程序選通信號(hào)、選通指示信號(hào)變?yōu)闊o(wú)效(高電平狀態(tài));使用內(nèi)部數(shù)據(jù)存儲(chǔ)器時(shí),地址總線A15~A0、數(shù)據(jù)總線D15~D0變?yōu)楦咦鐷iz,數(shù)據(jù)選通信號(hào)、選通指示信號(hào)

變?yōu)闊o(wú)效(高電平狀態(tài));使用內(nèi)部I/O映射寄存器時(shí),地址總線A15~A0、數(shù)據(jù)總線D15~D0變?yōu)楦咦鐷iz,I/O選通信號(hào)、選通指示信號(hào)變?yōu)闊o(wú)效(高電平狀態(tài))。

另外,當(dāng)輸入信號(hào)被激活(為低有效)時(shí),地址總線、數(shù)據(jù)總線以及相應(yīng)的控制信號(hào)全部變?yōu)楦咦?。?dāng)只使用外部局部數(shù)據(jù)存儲(chǔ)器時(shí),可不需信號(hào);當(dāng)使用局部和全局?jǐn)?shù)據(jù)存儲(chǔ)器時(shí),必須使用信號(hào)來區(qū)分二者。為高時(shí)為局部數(shù)據(jù)存儲(chǔ)器,為低時(shí)則為全局?jǐn)?shù)據(jù)存儲(chǔ)器。

是為與早期產(chǎn)品兼容而設(shè)計(jì)的,純粹是選通指示信號(hào),在硬件電路中可不用。

讀寫選擇信號(hào)也是冗余信號(hào),但可作為外接雙向緩沖器的方向選擇信號(hào)使用。

就緒信號(hào)READY為外部硬件等待狀態(tài)發(fā)生之用。除非等待時(shí)間很長(zhǎng),否則一般只使用內(nèi)部等待狀態(tài)發(fā)生器,此時(shí),應(yīng)將READY拉高,上拉可用10~100kΩ的電阻實(shí)現(xiàn)。2.3.2存儲(chǔ)器的類型

所有的TMS320'C2000器件都包括288W的雙訪問數(shù)據(jù)RAM(DARAM)和256W的數(shù)據(jù)/程序DARAM。隨著具體型號(hào)的不同,TMS320'C2000器件可能具有數(shù)據(jù)/程序單訪問RAM(SARAM)、只讀存儲(chǔ)器(ROM)或者閃爍存儲(chǔ)器(Flash)。

TMS320'C2000還具有映射在數(shù)據(jù)存儲(chǔ)器空間的CPU寄存器和映射在片內(nèi)I/O空間的外設(shè)寄存器。

1.片內(nèi)雙訪問RAM(DARAM)

DARAM是每個(gè)機(jī)器周期可被訪問兩次的存儲(chǔ)器。所有的TMS320'C2000器件都具有544W的片內(nèi)DARAM,544W的DARAM被分成B0[256W]、B1[256W]和B2[32W]3塊,它們主要被配置成數(shù)據(jù)存儲(chǔ)器(可雙訪問操作)。但在需要時(shí)也可將B0配置成程序存儲(chǔ)器(B1、B2塊不行,它們只能用做數(shù)據(jù)空間)。B0塊是配置成程序存儲(chǔ)空間還是數(shù)據(jù)存儲(chǔ)空間,要根據(jù)狀態(tài)寄存器ST1的CNF位的值判斷決定。由于DARAM可以在一個(gè)周期內(nèi)訪問兩次,因而改善了CPU的速度。該CPU運(yùn)行于4周期流水方式。在這種流水方式下,CPU在第3個(gè)周期讀數(shù)據(jù),在第4個(gè)周期寫數(shù)據(jù)。然而,DARAM允許CPU在一個(gè)周期內(nèi)讀寫數(shù)據(jù),CPU在該周期的主(正)相內(nèi)向DARAM寫數(shù)據(jù),而在從(負(fù))相內(nèi)從DARAM讀數(shù)據(jù)。例如,設(shè)有兩條指令A(yù)和B,指令A(yù)在CPU周期的主相內(nèi)將累加器的值存入DARAM中,指令B在從相內(nèi)從DARAM中將一個(gè)新的值裝入累加器。因?yàn)殡p訪問的操作包括寫,所以它只能是RAM,而不能是ROM。

2.片內(nèi)單訪問程序/數(shù)據(jù)RAM(SARAM)

一個(gè)時(shí)鐘周期只能訪問一次的存儲(chǔ)器稱為單訪問存儲(chǔ)器(SARAM),如TMS320C206和TMS320F206等型號(hào)的DSP器件中具有4KW的SARAM。這些SARAM可以被用做程序存儲(chǔ)器或/和數(shù)據(jù)存儲(chǔ)器,通過I/O映射寄存器PMST的DON和PON兩位來選定,DON和PON為非互斥關(guān)系。加載到SARAM中的程序代碼可以全速執(zhí)行。當(dāng)DON被置成1時(shí),SARAM被用做數(shù)據(jù)存儲(chǔ)器,要占用從800h開始的一段數(shù)據(jù)存儲(chǔ)器空間;當(dāng)DON被置成0時(shí),SARAM不被用做數(shù)據(jù)存儲(chǔ)器,不占用數(shù)據(jù)存儲(chǔ)器空間(留作外部數(shù)據(jù)存儲(chǔ)器擴(kuò)展用)。PON的情形類似,但地址是從8000h開始的??梢?,SARAM可單獨(dú)用做數(shù)據(jù)存儲(chǔ)器(DON?=?1,PON?=?0),或單獨(dú)用做程序存儲(chǔ)器(DON?=?0,PON?=?1),或既用做數(shù)據(jù)存儲(chǔ)器,又用做程序存儲(chǔ)器(DON?=?1,PON?=?1),或廢棄不用(DON?=?0,PON?=?0)。SARAM既用做數(shù)據(jù)存儲(chǔ)器又用做程序存儲(chǔ)器時(shí),映射到數(shù)據(jù)存儲(chǔ)空間的地址(從800h開始)和映射到程序存儲(chǔ)空間的地址(從8000h開始)是不同的。雖然具有雙倍地址空間,但由于SARAM的物理存儲(chǔ)器只有一個(gè),因此實(shí)際應(yīng)用中應(yīng)該按SARAM的物理空間分開使用,如4KW的SARAM,程序存儲(chǔ)器用8000h~0fffh空間,而數(shù)據(jù)存儲(chǔ)器可用1000h~17ffh空間。

3.工廠掩模的片內(nèi)ROM

TMS320‘C2000器件中有些片種具有片內(nèi)掩模型ROM來作為程序存儲(chǔ)器,例如TMS320C204和TMS320C209配置4KWROM,TMS320C206則配置32KWROM等。復(fù)位(reset)時(shí)驅(qū)動(dòng)引腳為低,即可選中該ROM。若不選該ROM,器件將從片外存儲(chǔ)器開始啟動(dòng)執(zhí)行。如果用戶希望使用自己的ROM,則可以按目標(biāo)文件(.obj)格式提供希望裝入ROM的代碼或數(shù)據(jù)(表格),TI公司將產(chǎn)生相應(yīng)的掩膜來對(duì)該ROM編程。

4.閃爍存儲(chǔ)器Flash

TMS320‘C2000器件中一些片種具有片內(nèi)Flash,它是電可擦除、可編程、非易失性(可長(zhǎng)久保存)的存儲(chǔ)器。每塊Flash都有一組控制寄存器,用來擦除、編程和測(cè)試該Flash塊。這些Flash塊可以通過在復(fù)位期間驅(qū)動(dòng)引腳為低來選擇。若不選Flash,器件將從片外的存儲(chǔ)器開始執(zhí)行。

有的器件片內(nèi)Flash帶有加密位,如TMS320LF/LC240XA系列就帶有加密位。2.3.3程序存儲(chǔ)器

程序存儲(chǔ)器空間用于存放應(yīng)用程序的代碼、數(shù)據(jù)表信息及常量。TMS320'C2000程序存儲(chǔ)器空間的尋址范圍為216?=?64?KW,可對(duì)片內(nèi)存儲(chǔ)器或片外存儲(chǔ)器尋址。每個(gè)TMS320'C2000器件都有片內(nèi)DARAM塊B0,B0可配置為程序存儲(chǔ)器和數(shù)據(jù)存儲(chǔ)器,片內(nèi)其它程序存儲(chǔ)器可能是SARAM、ROM或Flash。TMS320'C2000程序存儲(chǔ)器地址空間的具體分布依型號(hào)的不同有所差異,主要表現(xiàn)在ROM/Flash的使用及其容量的大小上。為了便于說明,本節(jié)以最常用的TMS320F206DSP為例加以介紹,TMS320F206的程序存儲(chǔ)器空間的分布如圖2.16所示。圖2.16TMS320F206的程序存儲(chǔ)器空間分布

64KW的程序存儲(chǔ)器空間被分為兩大部分,32KW為片內(nèi)Flash,另外32KW為片外存儲(chǔ)器。片內(nèi)Flash的0000h~003fh空間用于存放中斷向量(InterruptVectors),其它部分(0040h~7fffh)則是存放程序代碼和數(shù)據(jù)表。對(duì)絕大多數(shù)應(yīng)用系統(tǒng)來說,這些程序存儲(chǔ)器已經(jīng)足夠,不必另加外部擴(kuò)展。8000h~0ffffh的另外32KW為片外存儲(chǔ)器空間,當(dāng)PON?=?1時(shí),片內(nèi)的SARAM被映射到程序存儲(chǔ)器空間的8000h~8fffh區(qū)段,這時(shí)片外程序存儲(chǔ)器空間的8000h~8fffh區(qū)段不能使用(不被選中);當(dāng)CNF?=?1時(shí),片內(nèi)DARAM中的B0塊被映射到程序存儲(chǔ)器空間的0ff00h~0ffffh區(qū)段,這時(shí)片外程序存儲(chǔ)器空間的0ff00h~0ffffh區(qū)段不能使用(不被選中)。如確實(shí)需要,可對(duì)程序存儲(chǔ)器加以擴(kuò)展,一個(gè)8KW的程序存儲(chǔ)器擴(kuò)展電路如圖2.17所示,圖中用兩片8K×8b的存儲(chǔ)器擴(kuò)展成8K×16b的靜態(tài)存儲(chǔ)器,然后與TMS320'C2000芯片相連。TMS320'C2000的外部存儲(chǔ)器一般使用靜態(tài)存儲(chǔ)器SRAM,這樣可省去刷新電路,但成本稍高。使用隨機(jī)存儲(chǔ)器RAM,利于程序的反復(fù)加載和調(diào)試,但是若無(wú)需調(diào)試,也可用EPROM/EEPROM/Flash等可編程只讀存儲(chǔ)器,這時(shí)信號(hào)不必使用。圖2.178KW程序存儲(chǔ)器的擴(kuò)展電路當(dāng)TMS320‘C2000芯片的CPU訪問片內(nèi)程序存儲(chǔ)器時(shí),外部程序存儲(chǔ)器選通信號(hào)和處于無(wú)效狀態(tài)。僅當(dāng)CPU在映射到外部存儲(chǔ)器的地址范圍內(nèi)進(jìn)行訪問時(shí),外部總線才有效。此時(shí),=0,=0,選通外部程序存儲(chǔ)器(?

=?0)。

得注意的是,使用外部存儲(chǔ)器時(shí),應(yīng)考慮其速度因素。由于DSP速度較快,當(dāng)使用外部存儲(chǔ)器時(shí),要選擇高速的存儲(chǔ)器。若外部存儲(chǔ)器速度不足以勝任實(shí)時(shí)單周期操作,應(yīng)通過軟件等待發(fā)生器或READY信號(hào)插入等待周期。使用程序存儲(chǔ)器可按以下慣例考慮:

(1)在程序調(diào)試過程中,一般可用SARAM和B0塊作為部分或全部程序存儲(chǔ)器,這樣加載和修改程序都很方便。對(duì)無(wú)SRAM的DSP,應(yīng)將B0塊作為程序存儲(chǔ)器的活動(dòng)區(qū),以便適時(shí)修改代碼,給調(diào)試帶來方便。當(dāng)程序確實(shí)太長(zhǎng)時(shí),可考慮使用擴(kuò)展程序(靜態(tài)隨機(jī))存儲(chǔ)器,等程序調(diào)試可行后,再換成只讀存儲(chǔ)器。

(2)在實(shí)際使用時(shí),單獨(dú)用片內(nèi)Flash作為程序存儲(chǔ)器,而SARAM和DARAM全部用做數(shù)據(jù)存儲(chǔ)器,特別是DARAM應(yīng)用在頻繁讀寫的數(shù)據(jù)區(qū),這樣可提高程序執(zhí)行速度,同時(shí)充分利用片內(nèi)資源,降低系統(tǒng)成本。

(3)對(duì)于某些常數(shù)、初始化數(shù)據(jù)段、信號(hào)處理使用的系數(shù)等,可設(shè)計(jì)成數(shù)據(jù)表存放在程序存儲(chǔ)器中。這些數(shù)據(jù)表可作為操作數(shù)使用,也可通過指令將其轉(zhuǎn)移到數(shù)據(jù)存儲(chǔ)器中,再進(jìn)行使用。2.3.4數(shù)據(jù)存儲(chǔ)器

TMS320'C2000DSP的數(shù)據(jù)存儲(chǔ)器空間有兩大類,一類是局部數(shù)據(jù)存儲(chǔ)器,另一類是全局?jǐn)?shù)據(jù)存儲(chǔ)器。局部數(shù)據(jù)存儲(chǔ)器包括片內(nèi)數(shù)據(jù)存儲(chǔ)器和外部擴(kuò)展數(shù)據(jù)存儲(chǔ)器,共64KW的容量。而全局?jǐn)?shù)據(jù)存儲(chǔ)器則必須通過外部擴(kuò)展,主要用于處理器或系統(tǒng)之間的數(shù)據(jù)通信,可以像郵箱一樣使用。全局?jǐn)?shù)據(jù)存儲(chǔ)器的容量最大為32KW,可根據(jù)需要由寄存器GREG確定實(shí)際容量。唯一區(qū)分局部數(shù)據(jù)存儲(chǔ)器和全局?jǐn)?shù)據(jù)存儲(chǔ)器的控制信號(hào)是總線請(qǐng)求信號(hào),因此在使用外部擴(kuò)展局部數(shù)據(jù)存儲(chǔ)器和全局?jǐn)?shù)據(jù)存儲(chǔ)器時(shí),必須有此信號(hào)存在,方能正確操作。

TMS320'C2000的數(shù)據(jù)存儲(chǔ)器空間分布如圖2.18所示,圖中上半部分為局部數(shù)據(jù)存儲(chǔ)器空間,下半部分為全局?jǐn)?shù)據(jù)存儲(chǔ)器空間。訪問數(shù)據(jù)存儲(chǔ)器有直接尋址模式和間接尋址模式。當(dāng)使用直接尋址模式對(duì)局部數(shù)據(jù)存儲(chǔ)器尋址時(shí),將局部數(shù)據(jù)存儲(chǔ)器按地址分塊,每塊128W為一頁(yè)。64KW的局部數(shù)據(jù)存儲(chǔ)器可分為512頁(yè),記為0~511。局部數(shù)據(jù)存儲(chǔ)器的分頁(yè)及第0頁(yè)的地址映射如圖2.19所示。圖2.18數(shù)據(jù)存儲(chǔ)器空間分布圖2.19TMS320'C2000數(shù)據(jù)存儲(chǔ)器的數(shù)據(jù)頁(yè)配置及第0頁(yè)的地址映射局部數(shù)據(jù)存儲(chǔ)器空間中,地址0000h~005fh存儲(chǔ)塊為存儲(chǔ)器映射寄存器使用;地址0060h~007fh存儲(chǔ)塊為片內(nèi)雙訪問存儲(chǔ)器DARAM的B2塊;地址0080h~01ffh存儲(chǔ)塊為TMS320'C2000保留段,以備將來系統(tǒng)升級(jí)使用;當(dāng)CNF?=?0時(shí),地址0200h~02ffh存儲(chǔ)塊為片內(nèi)雙訪問存儲(chǔ)器DARAM的B0塊,而當(dāng)CNF?=?1時(shí),地址0200h~02ffh存儲(chǔ)塊為保留段;地址0300h~03ffh存儲(chǔ)塊為片內(nèi)雙訪問存儲(chǔ)器DARAM的B1塊;地址0400h~07ffh存儲(chǔ)塊為保留段;對(duì)于具有片內(nèi)SARAM的DSP,當(dāng)DON?=?1時(shí),地址0800h~17ffh存儲(chǔ)塊為片內(nèi)單訪問存儲(chǔ)器SARAM,當(dāng)DON?=?0或DSP無(wú)片內(nèi)SARAM時(shí),數(shù)據(jù)存儲(chǔ)器0800h~0ffffh可全部用做外部擴(kuò)展。需說明的是,即使外部存儲(chǔ)器用做全部數(shù)據(jù)空間(0000h~0ffffh),在片內(nèi)使用或保留的區(qū)段,外部空間是不會(huì)被尋址的(相應(yīng)的控制信號(hào)在片內(nèi)操作時(shí)無(wú)效)。因此,最大擴(kuò)展外部局部數(shù)據(jù)存儲(chǔ)器空間為58KW(當(dāng)使用SARAM作為數(shù)據(jù)存儲(chǔ)器時(shí))或62KW(當(dāng)不使用或無(wú)SARAM作為數(shù)據(jù)存儲(chǔ)器時(shí))。在TMS320‘C2000DSP中,DON和PON可同時(shí)有效,即SARAM可同時(shí)被用做程序存儲(chǔ)器和數(shù)據(jù)存儲(chǔ)器,這時(shí)在這一區(qū)段出現(xiàn)數(shù)據(jù)與程序存儲(chǔ)區(qū)的物理重疊,但邏輯上是分開的。

數(shù)據(jù)和程序的存放應(yīng)在物理位置上有所區(qū)分,否則數(shù)據(jù)的存儲(chǔ)將可能破壞程序代碼。物理位置的區(qū)分可按低4KW地址來劃分。當(dāng)程序使用8000h~87ffh的2KW段時(shí),數(shù)據(jù)則可使用1000h~17ffh的2KW段。雖然局部數(shù)據(jù)存儲(chǔ)器和全局?jǐn)?shù)據(jù)存儲(chǔ)器各有64KW和32KW的獨(dú)立空間,?但由于只有信號(hào)作為區(qū)分,因此局部數(shù)據(jù)存儲(chǔ)器和全局?jǐn)?shù)據(jù)存儲(chǔ)器不能同時(shí)同址使用。表2.3給出了由GREG寄存器配置全局?jǐn)?shù)據(jù)存儲(chǔ)器容量的情況。GREG連到內(nèi)部數(shù)據(jù)總線的低8位,GREG的高8位為任意值。GREG是存儲(chǔ)器映射寄存器,它被分配到數(shù)據(jù)存儲(chǔ)單元的0005h處。由表2.3可知,當(dāng)局部和全局?jǐn)?shù)據(jù)存儲(chǔ)器共享64KW存儲(chǔ)空間,可方便地操作局部和全局?jǐn)?shù)據(jù)存儲(chǔ)器,無(wú)需頻繁修改GREG;但當(dāng)二者均使用最大容量,或出現(xiàn)地址的邏輯重疊區(qū)時(shí),必須借助修改GREG來切換對(duì)局部和全局?jǐn)?shù)據(jù)存儲(chǔ)器的讀寫操作控制。信號(hào)在GREG分配的全局?jǐn)?shù)據(jù)存儲(chǔ)器操作時(shí)有效。表2.3GREG寄存器與局部和全局?jǐn)?shù)據(jù)存儲(chǔ)器的關(guān)系表2.3列出了GREG的可用值及相應(yīng)的地址范圍。注意:只能選擇該表所列的GREG值,選擇其它值會(huì)使存儲(chǔ)器映射分成碎片。

局部和全局?jǐn)?shù)據(jù)存儲(chǔ)器的擴(kuò)展與程序存儲(chǔ)器的擴(kuò)展方法相同,只需將信號(hào)換成即可。?圖2.20描述了8000h~ffffh?段32KW的局部數(shù)據(jù)存儲(chǔ)器和8000h~ffffh段32KW的全局?jǐn)?shù)據(jù)存儲(chǔ)器擴(kuò)展電路。事實(shí)上,局部數(shù)據(jù)存儲(chǔ)器可增大至64KW,做最大容量擴(kuò)展。全局存儲(chǔ)器中,只有當(dāng)A15?=?1時(shí)才有效變低,因此,A15不必用做譯碼。圖2.20數(shù)據(jù)存儲(chǔ)器的擴(kuò)展2.3.5I/O空間

I/O空間用于對(duì)片內(nèi)外設(shè)和片外設(shè)備(如模擬數(shù)字接口、編碼解碼接口等)的訪問。TMS320‘C2000器件支持64K×16b的I/O地址空間,如圖2.21所示。I/O地址空間被劃分成3塊,地址段0000h~feffh為外部端口使用;地址段ff00h~ff0fh為片內(nèi)I/O空間,用于測(cè)試保留,用戶不得使用;地址段ff10h~ffffh為片內(nèi)使用,作為I/O映射寄存器。表2.4列出了TMS320F206上映射到片內(nèi)I/O空間的寄存器。其它TMS320'C2000DSP器件的I/O映射寄存器與此表有所差異。兩條特殊的指令I(lǐng)N和OUT用于對(duì)這些空間(包括外部I/O端口和片內(nèi)I/O寄存器)進(jìn)行訪問。訪問外部并行I/O端口與訪問程序存儲(chǔ)器、數(shù)據(jù)存儲(chǔ)器復(fù)用同樣的地址總線和數(shù)據(jù)總線。DSP對(duì)I/O端口的操作指令為I/O端口與存儲(chǔ)空間交換數(shù)據(jù),因此其執(zhí)行時(shí)間較長(zhǎng),需2(IN)/3(OUT)個(gè)或以上的周期才能完成。若需要單周期的快速端口操作,可將數(shù)據(jù)存儲(chǔ)空間的一小部分分配給外設(shè),以存儲(chǔ)器方式的操作代替I/O慢速操作,即可實(shí)現(xiàn)快速外設(shè)數(shù)據(jù)交換。但應(yīng)注意這是以犧牲數(shù)據(jù)存儲(chǔ)器容量為代價(jià)的。圖2.21I/O空間分布表2.4映射到I/O空間的片內(nèi)寄存器進(jìn)行外部I/O端口操作時(shí),I/O選通信號(hào)被激活有效。TMS320‘C2000DSP的I/O操作是16位的,若只用8位,則可選高字節(jié)或低字節(jié)。圖2.22給出了一個(gè)8位輸入(I/O地址為0000h,使用低字節(jié))和一個(gè)8位輸出(I/O地址為0001h,使用低字節(jié))的I/O接口的例子。圖中用和片選邏輯一起形成外部設(shè)備的寫允許信號(hào)。當(dāng)?shù)刂窞?000h時(shí),選中74AC244,使外部輸入到達(dá)數(shù)據(jù)總線;當(dāng)?shù)刂窞?001h時(shí),選中74AC273,數(shù)據(jù)總線上的數(shù)據(jù)輸出到外部設(shè)備。由于讀端口不進(jìn)行寫操作,因此可省略部分信號(hào)(未用信號(hào))參與譯碼。又由于內(nèi)部I/O操作不產(chǎn)生有效的信號(hào),故可采用部分譯碼電路。這種簡(jiǎn)化方法可節(jié)省硬件開銷。圖2.22上的譯碼電路可以驅(qū)動(dòng)8個(gè)外設(shè)。圖2.22I/O端口的擴(kuò)展舉例2.3.6TMS320F206/LF2407的地址映射與存儲(chǔ)器配置

1.TMS320F206的地址映射與存儲(chǔ)器配置

圖2.23給出了TMS320F206存儲(chǔ)器地址分配示意圖,表2.5為該存儲(chǔ)器分配表。

注:①當(dāng)CNF?=?1時(shí),程序存儲(chǔ)器中的地址為fe00h~feffh和ff00h~ffffh的區(qū)域分配給了同一物理塊DARAMB0。例如,寫fe00h與寫ff00h的效果是相同的。為簡(jiǎn)單起見,當(dāng)CNF?=?1時(shí),將fe00h~feffh作為保留區(qū)。

②當(dāng)CNF?=?0時(shí),數(shù)據(jù)存儲(chǔ)器中的地址為0100h~01ffh和0200h~02ffh的區(qū)域分配給了同一物理塊DARAMB0。例如,寫0100h與寫0200h的效果是相同的。為簡(jiǎn)單起見,當(dāng)CNF?=?0時(shí),將0100h~01ffh作為保留區(qū)。

③數(shù)據(jù)存儲(chǔ)器中地址為0300h~03ffh和0400h~04ffh的區(qū)域分配給了同一物理塊DARAMB1。例如,寫0400h與寫0300h的效果是相同的。為簡(jiǎn)單起見,將0400h~04ffh作為保留區(qū)。

注意:不要寫保留地址。為避免處理器的不可預(yù)測(cè)的操作,不能向任何已標(biāo)明為保留的地址寫數(shù)據(jù)。這包括未指定給任何片內(nèi)寄存器的0000h~005fh范圍內(nèi)的數(shù)據(jù)存儲(chǔ)器地址,以及未指定給任何片內(nèi)寄存器的ff00h~ffffh范圍內(nèi)的I/O地址。

圖2.23TMS320F206存儲(chǔ)器地址分配示意圖

DON和PON是F206器件中PMST寄存器的bit2和bit1,通過寫操作可設(shè)置它們,將SARAM分配到程序存儲(chǔ)器或數(shù)據(jù)存儲(chǔ)器,其邏輯關(guān)系如下:

DONPON SARAM的分配

0 0 SARAM不映射,地址在外部存儲(chǔ)器(復(fù)位值)

0 1 SARAM在片內(nèi)程序存儲(chǔ)器8000h~8fffh

1 0 SARAM在片內(nèi)數(shù)據(jù)存儲(chǔ)器0800h~17ffh

1 1 SARAM同時(shí)被分配到程序存儲(chǔ)器和數(shù)據(jù)存儲(chǔ)器,

地址同上

PMST寄存器的bit0位鎖定在引腳上,?對(duì)其進(jìn)行寫操作可設(shè)置為微處理器(高)或微計(jì)算機(jī)(低)模式。表2.5TMS320F206存儲(chǔ)器分配表

2.TMS320LF2407的地址映射與存儲(chǔ)器配置

圖2.24給出了TMS320LF2407存儲(chǔ)器地址分配示意圖。

TMS320LF2407的片內(nèi)外設(shè)均由相應(yīng)的寄存器進(jìn)行管理,這些寄存器都是16位的數(shù)據(jù)存儲(chǔ)器映射寄存器,表2.6給出了TMS320LF2407數(shù)據(jù)存儲(chǔ)器映射寄存器的配置表。注:如果?=?0,為片內(nèi)Flash程序存儲(chǔ)器;如果?=?1,則為外部程序存儲(chǔ)器。

引導(dǎo)ROM:如果使能引導(dǎo)ROM,則程序存儲(chǔ)器0000h~00ffh區(qū)域?qū)⒈灰龑?dǎo)ROM占用。

①片內(nèi)程序存儲(chǔ)器0040h~0043h區(qū)域?yàn)楸A艨臻g。

②當(dāng)CNF?=?1時(shí),程序存儲(chǔ)器中的地址為fe00h~feffh和ff00h~ffffh的區(qū)域分配給了同一物理塊DARAM(B0)。例如,向fe00h寫數(shù)和向ff00h寫數(shù)的效果是相同的。為簡(jiǎn)單起見,將fe00h~feffh作為保留區(qū)。

③當(dāng)CNF?=?0時(shí),數(shù)據(jù)存儲(chǔ)器中的地址為0100h~01ffh和0200h~02ffh的區(qū)域分配給了同一物理塊DARAM(B0)。例如,向0100h寫數(shù)和向0200h寫數(shù)的效果是相同的。為簡(jiǎn)單起見,將0100h~01FFh作為保留區(qū)。

④數(shù)據(jù)存儲(chǔ)器中地址為0300h~03ffh和0400h~04ffh的區(qū)域分配給了同一物理塊DARAM(B1)。例如,向0300h寫數(shù)和向0400h寫數(shù)的效果是相同的。為了簡(jiǎn)單起見,將0400h~04FFh作為保留區(qū)。

圖2.24TMS320LF2407存儲(chǔ)器地址分配示意圖注:非法區(qū)域是指如果對(duì)這些區(qū)域進(jìn)行訪問,將會(huì)產(chǎn)生一個(gè)不可屏蔽中斷(NMI)。保留區(qū)域用于測(cè)試,如果對(duì)這些區(qū)域進(jìn)行訪問,將會(huì)產(chǎn)生不可預(yù)測(cè)的結(jié)果。

2.4TMS320‘C2000的程序控制

TMS320'C2000DSP的改進(jìn)型哈佛結(jié)構(gòu)和內(nèi)部多總線的應(yīng)用,使DSP具有并行操作的基礎(chǔ);而取指、譯碼、取操作數(shù)及執(zhí)行的重疊流水線結(jié)構(gòu),使指令的執(zhí)行效率大大提高,指令平均執(zhí)行時(shí)間降低,與單周期指令具有相同的執(zhí)行效果;硬件乘法單元和加法單元的有機(jī)組合,使單周期完成乘法和加法的指令成為可能;主運(yùn)算單元(中央算術(shù)邏輯單元(CALU))以外的輔助寄存器算術(shù)單元(ARAU),使DSP在進(jìn)行算術(shù)邏輯操作的同時(shí),能及時(shí)產(chǎn)生源或目標(biāo)操作數(shù)的地址,這使指令的功能得以提高,特別是進(jìn)行FFT運(yùn)算時(shí),存儲(chǔ)單元的位倒序相當(dāng)方便,且無(wú)需額外的周期?;赥MS320'C2000如此特殊的結(jié)構(gòu),了解其指令執(zhí)行的程序控制,有助于進(jìn)行有效編程,并提高程序的執(zhí)行效率。程序控制一般指的是控制一個(gè)或多個(gè)指令塊的執(zhí)行次序,內(nèi)容包括程序地址的產(chǎn)生,流水線順序執(zhí)行,無(wú)條件及有條件的分支、調(diào)用、返回,指令重復(fù)執(zhí)行以及中斷系統(tǒng)等(在高級(jí)的DSP器件中還包括指令塊的重復(fù)、Cache的使用控制、多處理器的協(xié)調(diào)等內(nèi)容)。2.4.1TMS320‘C2000DSP的程序地址產(chǎn)生

通常CPU順序執(zhí)行程序。也就是說,CPU一般是順序地從程序存儲(chǔ)器的連續(xù)地址單元中取出指令,即當(dāng)前地址加1。但在某些情況下,CPU非順序執(zhí)行程序,必須轉(zhuǎn)移到不連續(xù)的新地址去執(zhí)行程序,例如分支程序、子程序調(diào)用、響應(yīng)中斷等。緊接著的下一指令的地址來源于指令操作字、累加器低半部分ACCL(分支或調(diào)用)、堆棧(返回)、微堆棧(塊操作)、向量表(中斷)等。這就要求CPU在執(zhí)行當(dāng)前指令的同時(shí),能夠生成下一個(gè)指令機(jī)器碼所在的程序存儲(chǔ)器地址。為此,在TMS320'C2000的CPU內(nèi)部設(shè)置了一套程序地址產(chǎn)生邏輯,如圖2.25所示。程序地址產(chǎn)生邏輯由程序計(jì)數(shù)器PC、程序地址寄存器PAR、堆棧STACK及微堆棧MSTACK等部件組成,下面分別加以介紹。圖2.25程序地址產(chǎn)生邏輯原理圖

1.程序計(jì)數(shù)器PC

程序地址產(chǎn)生邏輯利用16位的程序計(jì)數(shù)器PC尋址內(nèi)部和外部程序存儲(chǔ)器,PC含有要執(zhí)行的下條指令的地址,經(jīng)程序地址總線PAB從程序存儲(chǔ)器中取出該地址的指令,并將其加載到指令寄存器。此時(shí),PC的值被更新為下一指令的地址。

PC的新值總是等于下一條指令所在的地址。當(dāng)CPU順序執(zhí)行時(shí),若當(dāng)前指令字長(zhǎng)為1W,則PC值?=?當(dāng)前值+1;若當(dāng)前指令字長(zhǎng)為2W,則PC值?=?當(dāng)前值+2;當(dāng)分支(跳轉(zhuǎn))時(shí),則將指令后的長(zhǎng)立即數(shù)或累加器低半部分ACCL加載到PC;當(dāng)子程序調(diào)用時(shí),將PC中下一條指令的地址首先壓入堆棧,然后將調(diào)用指令后的長(zhǎng)立即數(shù)或累加器低半部分ACCL直接加載到PC,當(dāng)子程序返回時(shí),則將棧頂內(nèi)容(即返回地址)從堆棧中彈出到PC;當(dāng)中斷調(diào)用時(shí),也是首先將剛執(zhí)行完的指令的下條指令地址入棧,然后把中斷向量表的內(nèi)容(中斷向量地址)裝入PC。

2.堆棧STACK

TMS320'C2000DSP具有一個(gè)寬為16、深度為8級(jí)的硬件堆棧,當(dāng)調(diào)用子程序或發(fā)生中斷時(shí),程序地址產(chǎn)生邏輯利用該堆棧保存返回地址,如圖2.26所示。當(dāng)程序中有少于8級(jí)嵌套的子調(diào)序調(diào)用和中斷時(shí),堆棧也可用于保存子程序或中斷服務(wù)程序中的數(shù)據(jù),或用于其它目的。訪問硬件堆??梢杂弥噶頟USH和POP來實(shí)現(xiàn),這兩條指令將棧頂?shù)闹蹬c累加器低半部分ACCL之間相互傳送。當(dāng)多于8級(jí)嵌套時(shí),會(huì)發(fā)生堆棧溢出,這時(shí)會(huì)使程序的執(zhí)行發(fā)生混亂。為了解決這一問題,DSP提供了一個(gè)使用軟堆棧的辦法。利用PSHD和POPD指令將數(shù)據(jù)從數(shù)據(jù)存儲(chǔ)器壓入棧頂或從棧頂彈出數(shù)據(jù)到數(shù)據(jù)存儲(chǔ)器,這個(gè)數(shù)據(jù)存儲(chǔ)器一般使用片內(nèi)雙訪問存儲(chǔ)器,常用B2塊(0060h~007Fh),經(jīng)堆棧軟擴(kuò)展后可適用于多級(jí)嵌套的復(fù)雜程序。圖2.26堆棧操作示意圖

3.微堆棧MSTACK

當(dāng)CPU執(zhí)行塊操作時(shí),要使用PC作為第一個(gè)操作數(shù)的地址增量,而用ARAU產(chǎn)生第2個(gè)操作數(shù)地址,這時(shí)要使用一個(gè)微堆棧(只有一級(jí)的堆棧)MSTACK來暫時(shí)保存返回地址(下條指令對(duì)應(yīng)的PC值)。這種操作開始時(shí),首先將PC+1(或PC+2)的地址送到微堆棧MSTACK保存,然后將首操作數(shù)的地址存入PC中,用ARAU產(chǎn)生第2個(gè)操作數(shù)地址。當(dāng)這些指令重復(fù)執(zhí)行時(shí),PC可使首操作數(shù)的地址自動(dòng)增量,ARAU使第2個(gè)操作數(shù)的地址改變,到所重復(fù)的指令完成時(shí)再將微堆棧彈回到PC。2.4.2TMS320‘C2000DSP的流水線

指令流水線包括指令執(zhí)行時(shí)發(fā)生的一系列總線操作。TMS320'C2000DSP的流水線有4級(jí),如圖2.27所示。圖2.27TMS320'C2000DSP的4級(jí)流水線操作

4級(jí)流水線把一個(gè)指令分解成4個(gè)獨(dú)立的階段:取指令(Fetch)、譯碼(Decode)、取操作數(shù)(Operand)、執(zhí)行(Execute)。由于這4個(gè)操作階段是相互獨(dú)立的,因此,這些操作可以重疊執(zhí)行。在任意的指定周期內(nèi),1~4條不同的指令均可有效(均被激活),每條被激活的指令均處于一個(gè)不同的操作階段。對(duì)于指令流,指令的4個(gè)階段在同一時(shí)間上的重疊使指令的平均執(zhí)行時(shí)間減少。在無(wú)流水線時(shí),一條指令的執(zhí)行時(shí)間為4個(gè)周期,有了流水線后,指令的平均執(zhí)行時(shí)間?=?無(wú)流水線執(zhí)行時(shí)間÷流水線級(jí)數(shù)?=?4÷4?=?1,即一條指令只需單周期執(zhí)行的時(shí)間。

分支、調(diào)用、中斷等操作會(huì)破壞流水線,而流水線的建立需4個(gè)周期才能完成,因此在這種情況下,指令的平均執(zhí)行時(shí)間會(huì)加長(zhǎng)。在多重循環(huán)的情況下,由于流水線被破壞,因此會(huì)耗費(fèi)掉相當(dāng)多的時(shí)間。為了解決這一問題,可采用空間換時(shí)間的技術(shù)(在高級(jí)DSP中,有塊重復(fù)指令,可很方便地實(shí)現(xiàn)程序塊的重復(fù)執(zhí)行而不影響流水線),把要重復(fù)的指令段重復(fù)排列在程序存儲(chǔ)器中,這樣利用流水線的特性可使程序按單周期的方式運(yùn)行。這在TMS320F206中容易實(shí)現(xiàn),因?yàn)?2KW的程序Flash對(duì)大多數(shù)應(yīng)用而言已足夠。若是單指令反復(fù)執(zhí)行,則可用單指令重復(fù)指令RPT方便地重復(fù)執(zhí)行某條指令,而不會(huì)破壞流水線。2.4.3TMS320‘C2000DSP的非順序執(zhí)行

TMS320'C2000DSP的CPU有指令重復(fù)、分支、調(diào)用、返回、中斷等非順序執(zhí)行方式,除指令重復(fù)不會(huì)破壞流水線(使流水線暫停)外,其它情況均會(huì)破壞流水線,但只有這樣才能完成程序要求的功能。因此在高級(jí)DSP中設(shè)置了延遲分支、調(diào)用、返回等模式,以彌補(bǔ)破壞流水線帶來的時(shí)間損失。

1.分支、調(diào)用和返回

除了無(wú)條件分支、調(diào)用和返回外,TMS320'C2000DSP還提供了一種帶條件判斷的分支、調(diào)用和返回指令,這給程序的編制和控制帶來了很大的方便。無(wú)條件分支直接控制程序的流向,由指令字的長(zhǎng)立即操作數(shù)或累加器的低半部ACCL直接無(wú)條件給出程序跳轉(zhuǎn)地址,CPU轉(zhuǎn)移到該地址繼續(xù)往下執(zhí)行。無(wú)條件調(diào)用則是直接無(wú)條件地轉(zhuǎn)移到指令字的長(zhǎng)立即數(shù)或累加器的低半部ACCL指定的地址執(zhí)行,完成后返回原斷點(diǎn)處執(zhí)行,這種操作要借助堆棧保存斷點(diǎn)(PC值入棧)。無(wú)條件返回則是無(wú)條件地將由于子程序調(diào)用(無(wú)論有無(wú)條件)或中斷調(diào)用而轉(zhuǎn)移到新程序地址處的PC再轉(zhuǎn)回到原斷點(diǎn)處(棧頂彈出值)繼續(xù)往下執(zhí)行。在TMS320'C2000中,條件分支、調(diào)用和返回所完成的功能與無(wú)條件分支、調(diào)用和返回是完全一致的,區(qū)別僅在于前者的執(zhí)行是有條件的,只有條件成立時(shí)才執(zhí)行該操作,否則CPU順序往下執(zhí)行。這種條件可以是無(wú)條件、單條件或多條件的組合。多條件時(shí)只有全部條件都成立,才認(rèn)為是條件滿足,只要有一個(gè)條件不成立,就認(rèn)為條件不滿足??蓽y(cè)試(判斷)

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論