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