本文主要是關(guān)于TMS320C6000和DSP的相關(guān)介紹,并著重對(duì)TMS320C6000和DSP芯片進(jìn)行了詳盡的闡述。
DSP
數(shù)字信號(hào)處理是一種將現(xiàn)實(shí)世界中的真實(shí)信號(hào)(專業(yè)術(shù)語稱之為連續(xù)信號(hào))轉(zhuǎn)換為計(jì)算機(jī)能夠處理的信息的過程。比如人們說話的聲音,這就是一個(gè)連續(xù)信號(hào),除此之外,現(xiàn)實(shí)生活中還有很多這樣的信號(hào),比如光、壓力、溫度等等。這些信號(hào)通過一個(gè)模擬向數(shù)字的轉(zhuǎn)換過程(稱之為AD),變成數(shù)字信號(hào)送給處理器,進(jìn)行數(shù)字計(jì)算,處理結(jié)束后,再把結(jié)果通過數(shù)字向模擬的轉(zhuǎn)換過程重新變成連續(xù)信號(hào)(稱之為DA)。用一般的通用微處理器可以完成這些工作,但是面臨的問題是滿足如此高的計(jì)算速度,就很難保證耗電量很低,更難保證價(jià)格足夠便宜。因此,另一種微處理器應(yīng)運(yùn)而生:數(shù)字信號(hào)處理器,簡稱DSP。
DSP是微處理器的一種,這種微處理器具有極高的處理速度。因?yàn)閼?yīng)用這類處理器的場(chǎng)合要求具有很高的實(shí)時(shí)性(Real Time)。比如通過移動(dòng)電話進(jìn)行通話,如果處理速度不快就只能等待對(duì)方停止說話,這一方才能通話。如果雙方同時(shí)通話,因?yàn)閿?shù)字信號(hào)處理速度不夠,就只能關(guān)閉信號(hào)連接。在DSP出現(xiàn)之前數(shù)字信號(hào)處理只能依靠MPU(微處理器)來完成。但MPU較低的處理速度無法滿足高速實(shí)時(shí)的要求。因此,直到70年代,有人才提出了DSP的理論和算法基礎(chǔ)。那時(shí)的DSP僅僅停留在教科書上,即便是研制出來的DSP系統(tǒng)也是由分立元件組成的,其應(yīng)用領(lǐng)域僅局限於軍事、航空航天部門。
90年代DSP發(fā)展最快,相繼出現(xiàn)了第四代和第五代DSP器件?,F(xiàn)在的DSP屬於第五代產(chǎn)品,它與第四代相比,系統(tǒng)集成度更高,將DSP芯核及外圍元件綜合集成在單一芯片上。這種集成度極高的DSP芯片不僅在通信、計(jì)算機(jī)領(lǐng)域大顯身手,而且逐漸滲透到人們?nèi)粘OM(fèi)領(lǐng)域。
DSP芯片,也稱數(shù)字信號(hào)處理器,是一種具有特殊結(jié)構(gòu)的微處理器。DSP芯片的內(nèi)部采用程序和數(shù)據(jù)分開的哈佛結(jié)構(gòu),具有專門的硬件乘法器,廣泛采用流水線操作,提供特殊的DSP指令,可以用來快速的實(shí)現(xiàn)各種數(shù)字信號(hào)處理算法。
根據(jù)數(shù)字信號(hào)處理的要求,DSP芯片一般具有如下的一些主要特點(diǎn):
(1)在一個(gè)指令周期內(nèi)可完成一次乘法和一次加法。
?。?)程序和數(shù)據(jù)空間分開,可以同時(shí)訪問指令和數(shù)據(jù)。
(3)片內(nèi)具有快速RAM,通??赏ㄟ^獨(dú)立的數(shù)據(jù)總線在兩塊中同時(shí)訪問。
?。?)具有低開銷或無開銷循環(huán)及跳轉(zhuǎn)的硬件支持。
?。?)快速的中斷處理和硬件I/O支持。
?。?)具有在單周期內(nèi)操作的多個(gè)硬件地址產(chǎn)生器。
?。?)可以并行執(zhí)行多個(gè)操作。
?。?)支持流水線操作,使取指、譯碼和執(zhí)行等操作可以重疊執(zhí)行。與通用微處理器相比,DSP芯片的其他通用功能相對(duì)較弱些。
TMS320C6000 DSP芯片介紹
近年來,以高速數(shù)字信號(hào)處理器(DSP)為基礎(chǔ)的實(shí)時(shí)數(shù)字信號(hào)處理技術(shù)飛速發(fā)展,并獲得了廣泛的應(yīng)用。TMS320C6000系列DSP是德州儀器公司(TI)推出的定點(diǎn)、浮點(diǎn)系列DSP,其中定點(diǎn)產(chǎn)品峰值處理能力達(dá)到4800MIPS,浮點(diǎn)產(chǎn)品峰值處理能力達(dá)到1350MFLOPS,是目前國際上性能最高的DSP之一,其卓越的性能使得它在傳統(tǒng)的DSP領(lǐng)域、雷達(dá)、無線電基站等高端領(lǐng)域,以及寬帶媒體、身份識(shí)別等新興領(lǐng)域都有很好的應(yīng)用前景。隨著DSP性能和功能的不斷增強(qiáng),應(yīng)用系統(tǒng)的設(shè)計(jì)越來越復(fù)雜,要將DSP的性能充分釋放出來,合理的板級(jí)設(shè)計(jì)是DSP系統(tǒng)開發(fā)人員面臨的一個(gè)關(guān)鍵性的問題。
TI公司的三種新型TMS320 DSP系列和OMAP系列
1.TMS320C2000——作控制用的最佳DSP,可以替代老的C1X和C2X。
TMS320C20X系列DSP芯片具有如下特點(diǎn):
?。?)處理能力強(qiáng):指令周期最短是25nm,運(yùn)算處理能力達(dá)40MIPS。
?。?)片內(nèi)具有較大的FLASH存儲(chǔ)器:TMS320C20X是最早使用片內(nèi)FLASH存儲(chǔ)器的DSP芯片,F(xiàn)LASH存儲(chǔ)器具有比ROM靈活、比RAM便宜的特點(diǎn),TMS320F206和TMS320F207的片內(nèi)具有32KB的FLASH存儲(chǔ)器和4.5KB的RAM。
?。?)芯片的功耗低:TMS320C20X系列DSP芯片在5V工作時(shí)每個(gè)MIPS消耗1.9mA電流,在3.3V工作時(shí)每個(gè)MIPS消耗1.1mA電流4)芯片的資源配置靈活。
TMS320C2000系列DSP芯片價(jià)格低,具有較高額性能和適用于控制領(lǐng)域的功能,因此可以廣泛地應(yīng)用于工業(yè)自動(dòng)化、電機(jī)控制、運(yùn)動(dòng)控制、電力電子、家用電器等領(lǐng)域?,F(xiàn)在有趨勢(shì)集中在以下兩個(gè)方向上:
(1)C20X16位定點(diǎn)DSP,速度為20MIPS,主要用途是電話、數(shù)字相機(jī)、售貨機(jī)等,其中:F206帶有閃速存儲(chǔ)器。
(2)C24X16位定點(diǎn)DSP,速度為20MIPS,用作數(shù)字馬達(dá)控制、工業(yè)自動(dòng)化、電力轉(zhuǎn)換系統(tǒng)、空調(diào)等。
2.TMS320C5000——低功耗高性能DSP,16位定點(diǎn),速度40~200MIPS。
主要用途是有線和無線通信、IP、便攜式信息系統(tǒng)、尋呼機(jī)、助聽器等。TMS320C54XX系列DSP芯片具有如下特點(diǎn):
?。?):運(yùn)算速度快:其運(yùn)算速度可達(dá)500MIPS。
?。?)優(yōu)化的CPU結(jié)構(gòu)。
(3)芯片的低功耗工作方式:TMS320C54XX的DSP核可以在3.3、2.5、1.8V甚至更低電壓下工作,特別適合于無限移動(dòng)設(shè)備。
?。?)芯片具有智能外設(shè):提供了多通道緩沖串行口。以及和外部處理器通信的主機(jī)HPI。
目前,C5000系列中又有三種新成員,一種是C5402,這是廉價(jià)型的DSP,速度保持100MIPS,片內(nèi)存儲(chǔ)空間稍小一些,RAM為16K、ROM為4K。主要應(yīng)用對(duì)象是無線Modem、新一代PDA、網(wǎng)絡(luò)電話和其它電話系統(tǒng)以及消費(fèi)類電子產(chǎn)品。第二種是C5420,它擁有兩個(gè)DSP核,速度達(dá)到200MIPS,200K片內(nèi)RAM,功耗0.32mA/MIPS,200MIPS全速工作時(shí)不超過120mW,為業(yè)內(nèi)功耗最低的DSP。C5420是當(dāng)今集成度最高的定點(diǎn)DSP,適合于做多通道基站、服務(wù)器、Modem和電話系統(tǒng)等要求高性能、低功耗、小尺寸的場(chǎng)合。第三種是C5416,它是TI公司0.15μm器件中的第一款,速度為160MIPS,有三個(gè)多通道緩沖串行口(McBSPs),能夠直接與T1或E1線路聯(lián)接,不需要外部邏輯電路,有128K片內(nèi)RAM。應(yīng)用對(duì)象是VoIP、通信服務(wù)器、PBX(專用小交換機(jī))和計(jì)算機(jī)電話系統(tǒng)等。
3.TMS320C6000——這是TI公司1997年2月推向市場(chǎng)的高性能DSP,綜合了目前DSP的所有優(yōu)點(diǎn):
?。?)具有最佳的性價(jià)比和低功耗。
?。?)運(yùn)行速度快:指令周期最小為3.3ns,運(yùn)算能力為2400MIPS。
?。?)指令集不同:一條指令中組合了幾個(gè)執(zhí)行單元,結(jié)合其獨(dú)特的內(nèi)部結(jié)構(gòu),充分發(fā)揮其內(nèi)部集成的各執(zhí)行單元的獨(dú)立運(yùn)行能力。
?。?)大量的片內(nèi)存儲(chǔ)器和大范圍的尋址能力:片內(nèi)最多集成了512K字程序存儲(chǔ)器和512K字?jǐn)?shù)據(jù)存儲(chǔ)器,并擁有32位的外部存儲(chǔ)器借口。
?。?)智能外設(shè):內(nèi)部集成了4-16個(gè)DMA借口,2-3個(gè)多通道緩沖串口,2個(gè)32位定時(shí)器等。由于TMS320C6000系列具有極高的性能,因此可以廣泛地應(yīng)用于通信領(lǐng)域,主要應(yīng)用于:數(shù)字移動(dòng)通信、個(gè)人通信系統(tǒng)、個(gè)人數(shù)字助理、數(shù)字無線通信、無線數(shù)據(jù)通信、便攜式因特網(wǎng)音頻處理器。
在老的TI DSP系列中,浮點(diǎn)C30還是TI公司主推的產(chǎn)品,因此它的售價(jià)不像其它老系列每年都要提升。TI公司還在對(duì)這個(gè)型號(hào)作性能改進(jìn)和制造廉價(jià)型,如新近推出的C33采用0.18μm制造工藝,有1M RAM,速度為120Mflops,為老產(chǎn)品的兩倍,而價(jià)格僅5美元。速度更高的150Mflops為8美元。C33與其它C3X器件代碼兼容,所以用戶可以保護(hù)其軟件環(huán)境,在他們換用新器件時(shí)還可以減少開發(fā)時(shí)間。
4.OMAP(Open Multimedia Applications Platform,開放式多媒體應(yīng)用平臺(tái))
這是TI公司推出的專門為支持第三代(3G)無線終端應(yīng)用而設(shè)計(jì)的應(yīng)用處理器體系結(jié)構(gòu)。OMAP處理器平臺(tái)提供了語言、數(shù)據(jù)和多媒體所需的帶寬和功能,可以極低的功耗為高端3G無線設(shè)備提供極佳的性能。OMAP嵌入式處理器系列包括應(yīng)用處理器及集成的基帶應(yīng)用處理器,目前已廣泛應(yīng)用于實(shí)時(shí)的多媒體數(shù)據(jù)處理、語音識(shí)別系統(tǒng)、互聯(lián)網(wǎng)通信、無線通信、PDA、Web記事本、醫(yī)療器械等領(lǐng)域。
TMS320C6000 DSP和Bootloader、VectorTable
1. Bootloader
如上圖,
(1)在Device Reset階段:
設(shè)備初始化為默認(rèn)狀態(tài),大部分三態(tài)輸出都配置為高阻態(tài)。
?。?)在CPU Reset階段:
從RS上升沿處開始(這個(gè)時(shí)候,根據(jù)HD[4:3]配置啟動(dòng)模式,HD8配置大小端模式,CLKMODE配置輸入時(shí)鐘源,根據(jù)HPI_EN配置外設(shè)功能),處理器檢查啟動(dòng)模式HD[4:3],啟動(dòng)bootloader程序。
EDMA自動(dòng)將CE1開始位置的1KB代碼拷貝到內(nèi)部程序存儲(chǔ)器的0地址。
?。?)RESET信號(hào)恢復(fù)高電平,CPU從內(nèi)存0地址處開始運(yùn)行程序
2. Interrupt Vector Table(Interrupt Service Table, IST)
處理器在RESET為低電平時(shí)復(fù)位,在RESET的上升沿,啟動(dòng)配置被鎖定,開始從0地址處執(zhí)行程序。一旦ROM啟動(dòng)完成(將外部ROM的1KB程序拷貝到內(nèi)存0地址完成),寄存器初始化為默認(rèn)值,程序計(jì)數(shù)器PC裝載復(fù)位中斷向量(復(fù)位中斷向量需要在0地址處),CPU開始從0地址開始執(zhí)行,這個(gè)地址稱為復(fù)位向量。
默認(rèn)的,中斷服務(wù)表(IST)也在0地址處。IST是中斷向量的一個(gè)集合,當(dāng)CPU中斷發(fā)生時(shí),PC自動(dòng)通過中斷向量跳轉(zhuǎn)到對(duì)應(yīng)的中斷服務(wù)程序。每個(gè)中斷向量都是8個(gè)字(WORD)對(duì)齊。IST可以重映射到任意的以0x400-byte對(duì)齊的位置,但需要修改中斷服務(wù)表指針(ISTP),在復(fù)位時(shí),ISTP初始化為0值,IST首地址與復(fù)位向量對(duì)齊。
(1)創(chuàng)建中斷向量表
IST由32個(gè)服務(wù)向量組成,每個(gè)向量對(duì)應(yīng)一個(gè)CPU中斷,特殊的:中斷號(hào)0對(duì)應(yīng)復(fù)位向量,中斷號(hào)1對(duì)應(yīng)不可屏蔽中斷(NMI)。中斷4~15對(duì)應(yīng)各種信號(hào)事件的中斷。中斷號(hào)為n的中斷向量的地址為
比如,ISTP重定位到0x1000,中斷號(hào)為4的中斷向量地址為Addr=0x1000+0x20*4=0x1080。
每個(gè)中斷向量必須在8條指令內(nèi)完成,若無法在8條指令內(nèi)完成,必須將一些工作放到中斷服務(wù)程序(Interrupt Service Routine, ISR)中完成。
.sect vectorsRESET: MVK .S2 Start, B0 ; Load Start address MVKH .S2 Start, B0 ; Load Start address B .S2 B0 ; Branch to start NOP NOP NOP NOP NOPNMI_ISR: MVK .S2 Nmi_isr, B0 MVKH .S2 Nmi_isr, B0 B .S2 B0 NOP NOP NOP NOP NOP
上面是包含了復(fù)位和不可屏蔽中斷的中斷向量表的一個(gè)例子,主要是完成一個(gè)跳轉(zhuǎn)到中斷服務(wù)程序的功能。
(2)中斷服務(wù)程序(ISR)
當(dāng)使用-c或-cr鏈接器選項(xiàng)時(shí),DSP的C編譯器自動(dòng)的創(chuàng)建了函數(shù)_c_int00,這個(gè)函數(shù)對(duì)應(yīng)C程序的入口地址,復(fù)位向量必須跳轉(zhuǎn)到_c_int00地址處。當(dāng)C程序遇到一個(gè)CPU中斷時(shí),在中斷向量表中或中斷服務(wù)程序中要使用的CPU寄存器都將先被壓入堆棧,一旦中斷服務(wù)程序完成,堆棧中的值彈出到對(duì)應(yīng)的寄存器,繼續(xù)執(zhí)行原C程序。
中斷服務(wù)程序需要使用關(guān)鍵字interrupt聲明,
interrupt void myISR(void){ /* Code for myISR */ …}
中斷服務(wù)程序沒有返回值,也沒有參數(shù),interrupt的功能就是在執(zhí)行該中斷服務(wù)程序前自動(dòng)將寄存器壓棧,執(zhí)行完后自動(dòng)的彈棧。
*********************************************************************************
* vecs.asm
* Copyright 2003 by SEED Electronic Technology Ltd.
* All rights reserved. Property of SEED Electronic Technology Ltd. *
* Designed by: Hongshuai.Li *
*********************************************************************************
*------------------------------------------------------------------------------
* Global symbols defined here and exported out of this file
*------------------------------------------------------------------------------
.global _vectors
.global _c_int00
.global _vector1
.global _vector2
.global _vector3
.global _vector4
.global _vector5
.global _vector6
.global _vector7
.global _c_int08 ; Hookup the c_int08 ISR in main()
.global _vector9
.global _vector10
.global _vector11
.global _vector12
.global _vector13
.global _vector14
.global _vector15
*------------------------------------------------------------------------------
* Global symbols referenced in this file but defined somewhere else.
* Remember that your interrupt service routines need to be referenced here.
*------------------------------------------------------------------------------
.ref _c_int00
*------------------------------------------------------------------------------
* This is a macro that instantiates one entry in the interrupt service table.
*------------------------------------------------------------------------------
VEC_ENTRY .macro addr
STW B0,*--B15
MVKL addr,B0
MVKH addr,B0
B B0
LDW *B15++,B0
NOP 2
NOP
NOP
.endm
*------------------------------------------------------------------------------
* This is a dummy interrupt service routine used to initialize the IST.
*------------------------------------------------------------------------------
_vec_dummy:
B B3
NOP 5
*------------------------------------------------------------------------------
* This is the actual interrupt service table (IST)。 It is properly aligned and
* is located in the subsection .text:vecs. This means if you don‘t explicitly
* specify this section in your linker command file, it will default and link
* into the .text section. Remember to set the ISTP register to point to this
* table.
*------------------------------------------------------------------------------
.sect “.text:vecs”
.align 1024
_vectors:
_vector0: VEC_ENTRY _c_int00 ;RESET
_vector1: VEC_ENTRY _vec_dummy ;NMI
_vector2: VEC_ENTRY _vec_dummy ;RSVD
_vector3: VEC_ENTRY _vec_dummy
_vector4: VEC_ENTRY _vec_dummy
_vector5: VEC_ENTRY _vec_dummy
_vector6: VEC_ENTRY _vec_dummy
_vector7: VEC_ENTRY _vec_dummy
_vector8: VEC_ENTRY _c_int08 ; Hookup the c_int08 ISR in main()
_vector9: VEC_ENTRY _vec_dummy
_vector10: VEC_ENTRY _vec_dummy
_vector11: VEC_ENTRY _vec_dummy
_vector12: VEC_ENTRY _vec_dummy
_vector13: VEC_ENTRY _vec_dummy
_vector14: VEC_ENTRY _vec_dummy
_vector15: VEC_ENTRY _vec_dummy
*------------------------------------------------------------------------------
********************************************************************************
* End of vecs.asm
********************************************************************************
上面是一個(gè)實(shí)際使用的C6713的中斷向量表的匯編文件(vecs.asm),其中定義了全部15個(gè)中斷向量,復(fù)位向量跳轉(zhuǎn)到_c_int00地址,8號(hào)中斷向量跳轉(zhuǎn)到_c_int08函數(shù)地址,在C主程序中應(yīng)該做如下定義,
/* * interrupt function */interrupt void c_int08(void){ }
另外,由于在C程序中的PC跳轉(zhuǎn)到中斷向量地址是遠(yuǎn)跳轉(zhuǎn),因此有時(shí)需要在C程序中聲明中斷向量地址為遠(yuǎn)地址,如下,
extern far void vectors();
其中的vectors()表示中斷向量表的起始地址(匯編中使用了_vectors)。
結(jié)語
關(guān)于TMS320C6000和DSP的相關(guān)介紹就到這了,如有不足之處歡迎指正。
評(píng)論
查看更多