日韩欧美自拍在线观看-欧美精品在线看片一区二区-高清性视频一区二区播放-欧美日韩女优制服另类-国产精品久久久久久av蜜臀-成人在线黄色av网站-肥臀熟妇一区二区三区-亚洲视频在线播放老色-在线成人激情自拍视频

一種TMS320 DSP中斷向量表設(shè)置和實(shí)現(xiàn)

出處:互聯(lián)網(wǎng) 發(fā)布于:2011-09-04 11:04:06

  摘要:  隨著DSP芯片應(yīng)用的不斷深入,用C語言開發(fā)DSP芯片,不僅可以使DSP芯片的開發(fā)速度大大提高,也使得程序的修改和移植變得十分方便。C語言設(shè)置TMS320系列DSP中斷向量表是語言開發(fā)DSP的一個(gè)具體應(yīng)用。

  1、引言

  數(shù)字信號(hào)處理(Digital Signal Processing,簡(jiǎn)稱DSP)是一門涉及許多學(xué)科而又廣泛應(yīng)用于許多領(lǐng)域的新興學(xué)科。20世紀(jì)60年代以來,隨著計(jì)算機(jī)和信息技術(shù)的飛速發(fā)展,數(shù)字信號(hào)處理技術(shù)應(yīng)運(yùn)而生并得到迅速的發(fā)展。數(shù)字信號(hào)處理是一種通過使用數(shù)學(xué)技巧執(zhí)行轉(zhuǎn)換或提取信息,來處理現(xiàn)實(shí)信號(hào)的方法,這些信號(hào)由數(shù)字序列表示。在過去的二十多年時(shí)間里,數(shù)字信號(hào)處理已經(jīng)在通信等領(lǐng)域得到極為廣泛的應(yīng)用。德州儀器、Freescale等半導(dǎo)體廠商在這一領(lǐng)域擁有很強(qiáng)的實(shí)力。

  DSP(digital signal processor)是一種獨(dú)特的微處理器,是以數(shù)字信號(hào)來處理大量信息的器件。其工作原理是接收模擬信號(hào),轉(zhuǎn)換為0或1的數(shù)字信號(hào)。再對(duì)數(shù)字信號(hào)進(jìn)行修改、刪除、強(qiáng)化,并在其他系統(tǒng)芯片中把數(shù)字?jǐn)?shù)據(jù)解譯回模擬數(shù)據(jù)或?qū)嶋H環(huán)境格式。它不僅具有可編程性,而且其實(shí)時(shí)運(yùn)行速度可達(dá)每秒數(shù)以千萬條復(fù)雜指令程序,遠(yuǎn)遠(yuǎn)超過通用微處理器,是數(shù)字化電子世界中日益重要的電腦芯片。它的強(qiáng)大數(shù)據(jù)處理能力和高運(yùn)行速度,是值得稱道的兩大特色。   DSP微處理器(芯片)一般具有如下主要特點(diǎn):

 ?。?)在一個(gè)指令周期內(nèi)可完成乘法和加法;

 ?。?)程序和數(shù)據(jù)空間分開,可以同時(shí)訪問指令和數(shù)據(jù);

 ?。?)片內(nèi)具有快速RAM,通常可通過獨(dú)立的數(shù)據(jù)總線在兩塊中同時(shí)訪問;

  (4)具有低開銷或無開銷循環(huán)及跳轉(zhuǎn)的硬件支持;

  (5)快速的中斷處理和硬件I/O支持;

 ?。?)具有在單周期內(nèi)操作的多個(gè)硬件地址產(chǎn)生器;

  (7)可以并行執(zhí)行多個(gè)操作;

  (8)支持流水線操作,使取指、譯碼和執(zhí)行等操作可以重疊執(zhí)行。

  當(dāng)然,與通用微處理器相比,DSP微處理器(芯片)的其他通用功能相對(duì)較弱些。

  DSP中斷的設(shè)置主要包括中斷服務(wù)程序的編寫,中斷向量表的設(shè)置,中斷寄存器的初始化等內(nèi)容。本文以TI公司TMS320系列DSP為例,說明用C語言設(shè)置中斷向量表的方法。并給出實(shí)例進(jìn)行說明。

  2、中斷向量表的定位

  中斷服務(wù)程序的地址(中斷向量)要裝載到存儲(chǔ)器的合適區(qū)域。一般這些向量都定位在0x0開始的程序存儲(chǔ)器中。但有些處理器要求或者可以在其他的存儲(chǔ)區(qū)域安裝中斷向量。

  對(duì)于微處理器模式下的TMS320C25、TMS320C26、TMS320C28、TMS320C30、TMS320C31,中斷向量定位于0x0開始的地址。對(duì)于微計(jì)算機(jī)/程序引導(dǎo)模式下的TMS320C31的中斷向量定位于0x809fc1,TMS320C26的中斷向量定位于0xffa0。中斷向量表的定位是與PMST寄存器的IPTR位有關(guān),有效的中斷向量表的基地址是0x0,0x800,0x1000,0x1800,0x2000,…0xf800。

  TMS320C4X的復(fù)位向量定位在四個(gè)地址之一,這四個(gè)地址由外部引腳RESETLOC0和RESETLOC1決定。TMS320C4X的中斷向量可存在于任何512字范圍的存儲(chǔ)器中,中斷向量表的地址由中斷向量表指針(IVTP)寄存器決定。自陷向量表的地址由自陷向量表指針(TVTP)寄存器決定。有效的中斷或者自陷向量表的基地址是0x0,0x200,0x400,0x800,0xa00,0xc00,0xe00,0x1000,0x1200…0xfffffe00,如表1所示。

  有兩種方法可以初始化中斷向量表,下面講解這兩種方法:

  方法一:利用已命名的ASM段

  生成向量表的直接方法就是用匯編指令。sect來生成一個(gè)表。這個(gè)表包含中斷向量的地址和跳轉(zhuǎn)指令。

  表1

  處理器      向量表基地址      說明

  TMS320C2X      0x0      不包括微計(jì)算機(jī)/程序引導(dǎo)模式下的TMS320C26

  TMS320C26      0xffa0      微計(jì)算機(jī)/程序引導(dǎo)模式

  TMS320C30      0x0

  TMS320C31      0x0      微處理器模式

  TMS320C31      0x809fc1      微計(jì)算機(jī)/程序引導(dǎo)模式

  TMS320C4X      復(fù)位      0x0,0x7fffffff,0x80000000,0xfffffff      外部引腳RESETLOC0和RESETLOC1決定

  中斷向量      任意512字范圍      IVTP寄存器決定

  自陷向量      任意512字范圍      TVTP寄存器決定

  TMS320C5X      復(fù)位      0x0

  中斷向量      任意2K字?jǐn)?shù)據(jù)頁(yè)      PMST寄存器的IPTR位決定

  在微計(jì)算機(jī)/程序引導(dǎo)模式下TMS320C2X、TMS320C5X和TMS320C31 從中斷向量的位置處執(zhí)行代碼,因而要用跳轉(zhuǎn)指令來代替中斷向量,如TMS320C31用24位指令BR來實(shí)現(xiàn):

  INT1:   BR   _c_int01

  在微處理器模式下TMS320C30、TMS320C31和TMS320C4X,中斷向量是下一條存取指令的地址,因而中斷服務(wù)程序的地址用匯編指令。word存儲(chǔ)在中斷向量處。例如,TMS320C4X中斷1 可用匯編語言定義如下:

  INT1:  .word   _c_int01

  因?yàn)橹袛喾?wù)的標(biāo)識(shí)符在匯編語言模塊外部被聲明,所以標(biāo)識(shí)符必須用。ref或。global來聲明。下面的例子是一個(gè)匯編語言模塊(vecs.asm)定義了一個(gè)包含TMS320C5X跳轉(zhuǎn)指令的段。

  .ref    _c_int0,  _c_int1      ;在外部定義中斷向量

  .sect  “vectors”             ;聲明一個(gè)一命名的段

  RS: b         _c_int0        ;轉(zhuǎn)至復(fù)位向量

  I1: b         _c_int1        ;轉(zhuǎn)至中斷向量1

  處理保留和未使用的區(qū)域

  有時(shí)中斷向量表中包含保留的地址,例如微計(jì)算機(jī)/程序引導(dǎo)模式下的TMS320C26或者TMS320C4X和TMS320C5X的復(fù)位和中斷向量不連續(xù)的情形。TMS320C31也會(huì)發(fā)生這種情形,系統(tǒng)中并不是所有的中斷都能被用到。為了處理向量映象中的保留地址,就要使用匯編指令。space保留的是位,對(duì)于浮點(diǎn)設(shè)備。space保留的字。例如,微計(jì)算機(jī)/程序引導(dǎo)模式下TMS320C26,假設(shè)所有中斷都是可用的

  .sect   “vectors”  ;為復(fù)位和中斷向量定義已命名的段

  .space  2*16        ;保留的空間

  b      _c_int1       ;INT0

  b      _c_int2       ;INT1

  b      _c_int3       ;INT2

  b      _c_int4       ;TINT

  b      _c_int5       ;RINT

  b      _c_int6       ;XINT

  b      _c_int7       ;TRAP

  但是,如果定時(shí)器和自陷中斷向量被使用時(shí),可用。space指令對(duì)向量表進(jìn)行如下的定義:

  .sect   “vectors”    ;為復(fù)位和中斷向量定義已命名的段

  .space   2*4*16      ;保留的和3個(gè)未使用的向量

  b      _c_int4        ;TINT

  .space   2*2*16      ;2個(gè)未使用的向量

  b       _c_int7        ;TRAP

  注意在中斷和自陷向量表中未使用的部分可用來存儲(chǔ)數(shù)據(jù)。但為了保證中斷處理的正確,一定要確保中斷和自陷向量不被破壞。

  鏈接到存儲(chǔ)器映象

  已命名段產(chǎn)生后,TMS320鏈接器就會(huì)把向量表鏈接到存儲(chǔ)器的合適位置,共分三步進(jìn)行:

  1.鏈接匯編語言模塊;

  2.根據(jù)中斷向量表的定位定義鏈接器的MEMORY段;

  3.在鏈接器的SECTIONS命令中,定位這些已命名的段。

  下面是TMS320C5X的命令文件,將vectors定位到040h。

  -c

  vecs.obj

  main.obj

  -l rts50.lib

  MENORY

  {

  PAGE0:VECTORS:origin = 0000h, length = 003fh

  ROM :origin = 0040h, length = 007cfh

  }

  SECTIONS

  {

  “vectors” :{} > VECTORS

  .text     :{} > ROM

  .

  }

  方法二:安裝一個(gè)運(yùn)行時(shí)的向量

  這種方法在開發(fā)和調(diào)試時(shí)很有用的,這種方法是用C語句在裝載中斷服務(wù)程序地址時(shí)建立一個(gè)運(yùn)行時(shí)的向量。該方法適用于微處理器模式下的TMS320C30和TMS320C31,以及TMS320C4X,因?yàn)樗鼈冎挥玫刂?,而不用跳轉(zhuǎn)指令作為中斷向量。其重點(diǎn)就是將中斷服務(wù)程序的地址放到合適的存儲(chǔ)器空間,例如,TMS320C30地址0x1對(duì)應(yīng)于外部中斷0(INT0),在該地址安裝中斷服務(wù)程序c_int01。使用如下語句“

  *((void (**) () )0x1) = c_int01;

  這里,0x1被轉(zhuǎn)換成指向函數(shù)的指針,因?yàn)樗瘮?shù)c_int01的地址。

  3、向量表指針

  TMS320C4X和TMS320C5X都可以不將中斷向量表放在0x0開始的位置。這兩個(gè)系列的DSP都是由寄存器來確定中斷向量的位置。TMS320C4X的復(fù)位向量地址是由處理器的引腳確定的四個(gè)地址中的一個(gè)。中斷能夠被正確的處理,首先必須在接收到中斷之前對(duì)中斷向量表進(jìn)行初始化。下面幾個(gè)例子是用來說明初始化與中斷有關(guān)的寄存器的方法。

  例1:在C中嵌入?yún)R編語句

  C語言是一種計(jì)算機(jī)程序設(shè)計(jì)語言。它既具有語言的特點(diǎn),又具有匯編語言的特點(diǎn)。它可以作為工作系統(tǒng)設(shè)計(jì)語言,編寫系統(tǒng)應(yīng)用程序,也可以作為應(yīng)用程序設(shè)計(jì)語言,編寫不依賴計(jì)算機(jī)硬件的應(yīng)用程序。因此,它的應(yīng)用范圍廣泛,不僅僅是在軟件開發(fā)上,而且各類科研都需要用到C語言,具體應(yīng)用比如單片機(jī)以及嵌入式系統(tǒng)開發(fā)。

  C是結(jié)構(gòu)式語言。結(jié)構(gòu)式語言的顯著特點(diǎn)是代碼及數(shù)據(jù)的分隔化,即程序的各個(gè)部分除了必要的信息交流外彼此獨(dú)立。這種結(jié)構(gòu)化方式可使程序?qū)哟吻逦?,便于使用、維護(hù)以及調(diào)試。C 語言是以函數(shù)形式提供給用戶的,這些函數(shù)可方便的調(diào)用,并具有多種循環(huán)、條件語句控制程序流向,從而使程序完全結(jié)構(gòu)化。

  這個(gè)例子,利用在C語言中嵌入?yún)R編語句來設(shè)置TMS320C4X的中斷向量,其起始地址為0x0,方法是通過將IVTP寄存器的值設(shè)置為0x0。

  asm(“      PUSH      R0”);

  asm(“      LDI      0h, R0”);

  asm(“      LDPE   R0, IVTP”);

  asm(“      POP            R0”);

  例2:利用TMS320C4X的PRTS

  這個(gè)例子,利用TMS320C4X的并行運(yùn)行

  支持庫(kù)來設(shè)置中斷向量表,起始地址為0x02ff800,利用PRTS庫(kù)函數(shù)set_ivtp()設(shè)置IVTP寄存器的值使向量表定位于RAM0存儲(chǔ)器的開始地址。當(dāng)使用PRTS時(shí),不需要用戶命名中斷向量段,而是在運(yùn)行時(shí)使用PRTS函數(shù)install_int_vector()將向量定位在預(yù)先定義的段。vector中。首先要把PRTS庫(kù)鏈接到程序,并在命令文件中預(yù)先定義。vector段,把。vector段定位在ROM0存儲(chǔ)器的開始地址。命令文件如下所示:

  -l prts40.lib

  MEMORY

  {

  RAM0:org = 0x2ff800 ,  len = 0x400

  }

  SECTIONS

  {

  “。vector”:  {} > RAM0

  }

  主程序中必須包含頭文件intpt40.h。函數(shù)set_ivtp()使用預(yù)定義的參量DEFAULT才能被調(diào)要,這樣設(shè)置IVTP寄存器可使。vector段按命令文件中定義定位。中斷向量可使用函數(shù)install_int_vector()來安裝,如下所示:

  #include <intpt40.h>

  void c_int99(void)

  {

  for( ; ; );

  }

  void main(void)

  {

  set_ivtp(DEFAULT);

  install_int_vector((void *) c_int99,2);

  例3:鏈接時(shí)指定TMS320C4X或TMS320C5X的符號(hào)

  當(dāng)TMS320C5X的編輯器中沒有PRTS庫(kù)而不能設(shè)置向量表指針時(shí),還有一個(gè)方便的方法可以達(dá)到同樣的目的。那就是使用在鏈接時(shí)指定符號(hào)的方法。

  這種方法的主要思想是利用包含復(fù)位和中斷向量的匯編語言段(。sect)以及用鏈接器映射中斷向量在內(nèi)存中的分布。C程序可以獲得這個(gè)地址并把它裝載到中斷向量表指針(TMS320C4X的IVTP寄存器或者TMS320C5X的PMST寄存器)。

  本例為TMS320C5X芯片,中斷向量定位于匯編語言模塊中,標(biāo)號(hào)IVECS指向中斷向量表的基地址,下面說明如何獲取中斷向量地址。

  .def  IVECS

  .ref  _c_int0, _c_int1, _c_int2

  .sect  “reset”

  b    _c_int0

  .sect  “vectors”

  IVECS  .space  2

  b     _c_int1

  b     _c_int2

  在鏈接器中,用鏈接器指定的標(biāo)號(hào)初始化鏈接器定義的變量。如下所示:

  –c

  vecs.obj

  –lrts50.lib

  _vecTable = IVECS

  MEMORY

  {

  PAGE 0: VECTORS: origin = 00000h, length = 0003fh

  ROM: origin = 00040h, length = 007CFh

  P_RAM: origin = 00800h, length = 023FFh

  . . .

  }

  SECTIONS

  {

  ”reset” > VECTORS

  ”vectors” > P_RAM

  .text: > ROM

  .cinit: > ROM

  .bss: > RAMB0_D

  .stack: > INT_RAM

  }

  在C程序中,將vecTable聲明為外部的無符號(hào)指針:

  extern unsigned int *vecTable;

  將它裝載到PMST寄存器中。

  unsigned int *pmst = (unsigned int *) 0x07;

  *pmst |= (unsigned int) vecTable;

  4、結(jié)束語

  隨著DSP芯片性能價(jià)格比的不斷提高,DSP芯片會(huì)在更多的領(lǐng)域內(nèi)得到更為廣泛的應(yīng)用。利用語言特別是C語言開發(fā)的DSP應(yīng)用系統(tǒng)將會(huì)得到不斷推廣,從而可以提高DSP芯片的開發(fā)速度。
 



  
關(guān)鍵詞:DSP

版權(quán)與免責(zé)聲明

凡本網(wǎng)注明“出處:維庫(kù)電子市場(chǎng)網(wǎng)”的所有作品,版權(quán)均屬于維庫(kù)電子市場(chǎng)網(wǎng),轉(zhuǎn)載請(qǐng)必須注明維庫(kù)電子市場(chǎng)網(wǎng),http://www.hbjingang.com,違反者本網(wǎng)將追究相關(guān)法律責(zé)任。

本網(wǎng)轉(zhuǎn)載并注明自其它出處的作品,目的在于傳遞更多信息,并不代表本網(wǎng)贊同其觀點(diǎn)或證實(shí)其內(nèi)容的真實(shí)性,不承擔(dān)此類作品侵權(quán)行為的直接責(zé)任及連帶責(zé)任。其他媒體、網(wǎng)站或個(gè)人從本網(wǎng)轉(zhuǎn)載時(shí),必須保留本網(wǎng)注明的作品出處,并自負(fù)版權(quán)等法律責(zé)任。

如涉及作品內(nèi)容、版權(quán)等問題,請(qǐng)?jiān)谧髌钒l(fā)表之日起一周內(nèi)與本網(wǎng)聯(lián)系,否則視為放棄相關(guān)權(quán)利。

廣告
OEM清單文件: OEM清單文件
*公司名:
*聯(lián)系人:
*手機(jī)號(hào)碼:
QQ:
有效期:

掃碼下載APP,
一鍵連接廣大的電子世界。

在線人工客服

買家服務(wù):
賣家服務(wù):
技術(shù)客服:

0571-85317607

網(wǎng)站技術(shù)支持

13606545031

客服在線時(shí)間周一至周五
9:00-17:30

關(guān)注官方微信號(hào),
第一時(shí)間獲取資訊。

建議反饋

聯(lián)系人:

聯(lián)系方式:

按住滑塊,拖拽到最右邊
>>
感謝您向阿庫(kù)提出的寶貴意見,您的參與是維庫(kù)提升服務(wù)的動(dòng)力!意見一經(jīng)采納,將有感恩紅包奉上哦!