精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

淺談TMS320C6000系列中斷設(shè)置問題

ss ? 作者:工程師譚軍 ? 2018-09-07 09:25 ? 次閱讀

本文只要是關(guān)于TMS320C6000和DSP的相關(guān)介紹,并著重對TMS320C6000系列中斷設(shè)置問題進(jìn)行了詳盡的闡述。

DSP

隨著DSP(數(shù)字信號處理器)系統(tǒng)的廣泛應(yīng)用,其程序規(guī)模也隨之不斷擴(kuò)大,使用芯片本身自帶的Boot-loader通過Flash存儲器來引導(dǎo)DSP程序,往往受到程序大小和結(jié)構(gòu)的制約,比如程序很大超過廠商固化boot的范圍,再如中斷向量表的不同位置對程序boot跳轉(zhuǎn)的影響,等等,因此越來越需要更加靈活的引導(dǎo)方式。

系統(tǒng)上電后,由引導(dǎo)程序?qū)SP的應(yīng)用程序從該存儲器引導(dǎo)到DSP應(yīng)用板上的高速存儲器(如內(nèi)部SRAMSDRAM等)中。由于Flash存儲器具有電信號刪除功能,且刪除速度快,集成度高,因此已成為此種存儲器的首選。由于Flash存儲器的存取速度較慢,寫入Flash存儲器的程序?qū)⒃谙到y(tǒng)上電時被DSP裝載到快速的存儲器中運(yùn)行,這個過程稱為Boot loader。不同的DSP有不同的引導(dǎo)方式。

DSP編程

DSP系統(tǒng)的引導(dǎo)裝載是指在系統(tǒng)加電后,系統(tǒng)自行將一段存儲在外部非易失性存儲器中的代碼移植到內(nèi)部DSP的高速RAM中并執(zhí)行的過程。

因此,在引導(dǎo)裝載系統(tǒng)中,外部非易失性存儲器和DSP的性能顯得尤為重要。

FLASH存儲器是一種高密度、非易失性的電可擦寫存儲器。

而且單位存儲比特的價格比傳統(tǒng)的EPROM要低,所以十分適合于作為外擴(kuò)存儲器。

在系統(tǒng)加電之前,必須先將引導(dǎo)程序和用戶程序?qū)懭隖LASH中。

編程時,除了可以利用專用的硬件編程器實(shí)現(xiàn)對FLASH的編程之外,F(xiàn)LASH通常還支持DSP軟件編程以實(shí)現(xiàn)同樣的功能。

當(dāng)系統(tǒng)加電之后,一般首先在FLASH中運(yùn)行引導(dǎo)程序,并由其自行完成對用戶程序的移植操作,然后再由DSP高速運(yùn)行移人到DSP片內(nèi)的用戶程序。

DSP編程技巧

mposerStudio)是TI公司開發(fā)的一個完整的DSP集成開發(fā)環(huán)境。由于TI的DSP使用非常廣泛,使得CCS也就成為使用最為廣泛的DSP開發(fā)軟件之一。現(xiàn)在,所有TI公司的DSP都可以在該環(huán)境里進(jìn)行開發(fā),可實(shí)現(xiàn)全空間透明仿真,不占用用戶任何資源,軟件配有匯編/鏈接、C編譯器、C源碼調(diào)試器等。不同的系統(tǒng)有不同版本的CCS開發(fā)環(huán)境,TMS320F28l2的集成開發(fā)環(huán)境是CCS2000。在購買開發(fā)板時都會免費(fèi)贈送CCS開發(fā)軟件,另外也可以在TI的網(wǎng)站上免費(fèi)下載該軟件,開發(fā)環(huán)境的安裝使用一般在DSP開發(fā)板的使用說明書中有詳盡的敘述,在此不做贊述。

2.編程語言CCS開發(fā)環(huán)境支持兩種語言:匯編語言和C語言。TI的每個DSP系列都有對應(yīng)的一套匯編指令,如果采用匯編語言編程,需要熟悉這些指令,難度和效率可想而知。現(xiàn)在TI的工程師在不斷改進(jìn)CCS的C程序優(yōu)化編譯器,目前C優(yōu)化的效率可達(dá)到手工匯編的90%甚至更高。當(dāng)然有的時候如果計算能力和內(nèi)存資源是瓶頸,ASM還是有優(yōu)勢,比如G.729編解碼。但是針對一般的應(yīng)用開發(fā),C語言是最好的選擇,只要有一定的C語言的基礎(chǔ),就完全可以進(jìn)行DSP的開發(fā)編程。

應(yīng)用實(shí)例及開發(fā)流程

1.實(shí)例介紹400Hz的逆變電源的控制部分實(shí)現(xiàn)的主要功能有:(1)AD轉(zhuǎn)換,(2)SPWM生成,(3)與顯示單片機(jī)的串口通信,(4)與其他并聯(lián)電源的CAN總線通信;(5)捕捉同步信號。妥實(shí)現(xiàn)以上這些功能,顯然普通的單片機(jī)是無法完成的,因此我們選擇了專門用作控制的數(shù)字信號處理器TMS320F2812。在此儀對TMS320F28l2生成SPWM波的開發(fā)過程作詳細(xì)介紹。

PWM(PulseWidthModulation)控制就是對脈沖的寬度進(jìn)行調(diào)制的技術(shù),即通過對一系列脈沖的寬度進(jìn)行調(diào)制,來等效地獲得所需要波形。

SPWM波形(SinuSOIdalPWM)就是脈沖的寬度按正弦規(guī)律變化而和正弦波等效的PWM波形,在逆變電路中的應(yīng)用最為廣泛。在此例中SPWM的功能是給三相逆變電路的6個IGBT(絕緣柵雙極晶體管)提供觸發(fā)脈沖,從而使直流電逆變?yōu)?00Hz的正弦交流電。

2.開發(fā)流程(1)編寫軟件SPWM的生成主要是應(yīng)用TMS320F28l2的事件管理器模塊(EVA/B),所以編寫程序前要做的主要工作就是了解熟悉這一模塊的結(jié)構(gòu)和工作原理,至于其他用不到的模塊可暫時不作了解。程序編寫的第一步就是要對用到的模塊的各種寄存器進(jìn)行設(shè)置,第二步就是算法的設(shè)計編寫。

(2)調(diào)試程序編寫完程序后,就要在仿真環(huán)境下進(jìn)行調(diào)試,先編譯再運(yùn)行,通過示波器可以直接觀察DSP引腳上輸出的SPWM波形,直到與要求的波形相符為止。

(3)燒寫程序在仿真環(huán)境下調(diào)試好程序后,需要把程序燒寫到DSP的片上FLASH存儲器中。燒寫時必須先安裝專門的燒寫軟件,安裝后就可以直接在CCS環(huán)境下操作燒寫。燒寫完成后就可以脫離仿真器,開發(fā)板就可以上電獨(dú)立運(yùn)行,并和其他的外圍電路相連而實(shí)現(xiàn)它的功能。

習(xí)方法知參考資源一、習(xí)方法初學(xué)DSP常常會感覺到技術(shù)文檔太多,無從下手。根據(jù)我的自學(xué)經(jīng)歷,這時最應(yīng)該弄明白的就是DSP芯片的內(nèi)部硬件工作原理,如果有微機(jī)原理和單片機(jī)基礎(chǔ)的話,這應(yīng)該是很容易掌握的,如果沒有這方面的基礎(chǔ),建議先去找一本微機(jī)原理的書看,看明白后再來看DSP的原理。另外,DSP的外設(shè)模塊有很多,這時沒有必要都去了解,只是了解你所用到的模塊就可以了。

了解了DSP的工作原理之后,就要去看關(guān)于軟件開發(fā)環(huán)境的書,包括軟件的安裝和使用。然后就找?guī)讉€完整的工程(購買開發(fā)板時都會贈送各模塊的完整工程)來看,在似懂非懂的大體了解了一個完整工程的創(chuàng)建及結(jié)構(gòu)后,就可以開始分析和你所用到的模塊相關(guān)的程序。現(xiàn)在有大量現(xiàn)成的例程和算法可以參考,切忌自己悶頭摸索,一定要去找相關(guān)的程序來參考,這會起到事半功倍的效果。

淺談TMS320C6000系列中斷設(shè)置問題

實(shí)現(xiàn)DSP中斷需要做哪些通用工作

設(shè)置允許哪些非屏蔽中斷

設(shè)置各個允許的非屏蔽中斷的中斷來源

設(shè)置開啟總中斷

設(shè)計中斷向量表

將中斷向量表通過cmd文件掛載到指令內(nèi)存

提供中斷處理函數(shù)

如果中斷向量表首地址掛載的不是地址,那么需要設(shè)置中斷向量表地址寄存器

對于不同的中斷源,需要做各個自己的工作,比如如果是外部中斷,那么需要設(shè)置管腳極性,即由高-》低產(chǎn)生中斷抑或反之。

為了照顧知識較少的讀者,下面將從一個新工程出發(fā),引導(dǎo)大家建立一個中斷示例程序。

如果您對建立工程很熟悉,可以跳過此步。

三、 建立新工程

1.點(diǎn)擊Project-》New,設(shè)置Project Name為intexample,Project Type為Executable,Target選擇您需要的器件,在此由于本人使用的是DSK6416評估板。因此選擇TMS320C64XX。

2.添加標(biāo)準(zhǔn)庫rts6400.lib,以便自動產(chǎn)生c_int00等函數(shù)。右擊當(dāng)前工程,選擇“Add Files to Project”,選擇庫所在路徑,一般為CCS安裝自帶,可參考本CCS3.1版本的路徑地址:\CCStudio_v3.1\C6000\cgtools\lib\rts6400.lib

如果您使用的是其他器件類型,請?jiān)趌ib文件夾內(nèi)選擇其他器件庫。

添加源文件,選擇File-》New-》Source File,保存為main.c到工程路徑下。

在此文件內(nèi)書寫主函數(shù)。

void main(void)

{

while(1);

}

最后通過如2步驟添加此文件到工程。

3.添加寄存器別名定義頭文件。在本示例中,對需要用到的寄存器定義別名后,構(gòu)成global.h文件,內(nèi)容在后文逐步介紹。在此可以建立一個空文件,并在main.c中包括它。

#i nclude “global.h”

到此,一個DSP的新工程框架制作完畢。

4.添加cmd鏈接文件

為了實(shí)現(xiàn)鏈接時內(nèi)存配置,我們需要提供一個cmd文件,為了方便,可以從官方的示例程序中拷貝一份,再加以修改。

在安裝目錄下D:\CCStudio_v3.1\tutorial\器件類型\hello1示例下,會找到一個hello1.cmd,

將其拷貝到本工程目錄下,并將其改名為link.cmd,最后將其添加到工程中。

由于此文件沒有聲明stack和heap,會產(chǎn)生警告,如果動態(tài)數(shù)據(jù)較多也容易溢出。因此我們最好在此文件提供stack和heap的大小,其值可根據(jù)實(shí)際情況調(diào)整,修改后,此文件內(nèi)容類似為:

-stack 0x1000

-heap 0x1000

MEMORY

{

ISRAM : origin = 0x0, len = 0x1000000

}

SECTIONS

{

.vectors 》 ISRAM

.text 》 ISRAM

.bss 》 ISRAM

.cinit 》 ISRAM

.const 》 ISRAM

.far 》 ISRAM

.stack 》 ISRAM

.cio 》 ISRAM

.sysmem 》 ISRAM

}

至此,工程建立完畢,可以編譯一遍,觀察是否正常。

--------------------------- intexample.pjt - Debug ---------------------------

[main.c] “D:\CCStudio_v3.1\C6000\cgtools\bin\cl6x” -g -fr“D:/intexample/Debug” -d“_DEBUG” -mv6400 -@“Debug.lkf” “main.c”

[Linking.。。] “D:\CCStudio_v3.1\C6000\cgtools\bin\cl6x” -@“Debug.lkf”

《Linking》

Build Complete,

0 Errors, 0 Warnings, 0 Remarks.

四、 定時器中斷設(shè)計

首先,我們先實(shí)現(xiàn)一個定時器中斷,因?yàn)樗皇芡獠坑绊懀菀诇y試。

在global.h文件中,加入控制寄存器和中斷寄存器別名定義,另外為了使用定時器1,也應(yīng)對其別名進(jìn)行定義:

/*定義控制寄存器*/

extern cregister volatile unsigned int AMR; /* Address Mode Register */

extern cregister volatile unsigned int CSR; /* Control Status Register */

extern cregister volatile unsigned int IFR; /* Interrupt Flag Register */

extern cregister volatile unsigned int ISR; /* Interrupt Set Register */

extern cregister volatile unsigned int ICR; /* Interrupt Clear Register */

extern cregister volatile unsigned int IER; /* Interrupt Enable Register */

extern cregister volatile unsigned int ISTP; /* Interrupt Service Tbl Ptr */

extern cregister volatile unsigned int IRP; /* Interrupt Return Pointer */

extern cregister volatile unsigned int NRP; /* Non-maskable Int Return Ptr*/

extern cregister volatile unsigned int IN; /* General Purpose Input Reg */

extern cregister volatile unsigned int OUT; /* General Purpose Output Reg */

/* 定義中斷選擇寄存器*/

#define MUXH 0x019C0000

#define MUXL 0x019C0004

#define EXTPOL 0x019C0008

/*定義定時器1寄存器*/

#define CTL1 0x01980000 //Timer1 control register

#define PRD1 0x01980004 //Timer1 period register

#define CNT1 0x01980008 //Timer1 counter register

之后,在main函數(shù)中對定時器進(jìn)行初始化,在此我們使用Timer1,參數(shù)初始化函數(shù)如下:

void Timer1_Init(void)

{

*( volatile unsigned int* )CTL1= 0x00000201; //計數(shù)器功能設(shè)置

*( volatile unsigned int* )PRD1= 0x1000; //計數(shù)器周期值

*( volatile unsigned int* )CTL1|= 0x000000C0; //計數(shù)器清零,啟動

上句的注釋:*( volatile unsigned int* )CTL1=CTL1|0x000000C0

}

并在主函數(shù)中調(diào)用它。

隨后我們設(shè)置中斷寄存器參數(shù)。

DSP支持1個RESET中斷,1個NMI(不可屏蔽中斷),12個可屏蔽中斷(INT4-15),它們具有優(yōu)先級順序,INT4最高,INT15最低。每個中斷號(INT4-INT15)都可以設(shè)置任何中斷來源。在此我們選擇中斷INT10,即開啟中斷10,并設(shè)置其中斷來源為定時器1,即在MUXH或MUXL中指定位上填寫中斷來源選擇碼:

中斷來源選擇碼定義如下:(此內(nèi)容可以通過幫助中搜索INTSEL得到)

INTSEL(Interrupt Selection Number Deion)

00000b DSPINT Host port host to DSP interrupt

00001b TINT0 Timer 0 interrupt

00010b TINT1 Timer 1 interrupt

00011b SD_INT EMIF SDRAM timer interrupt

00100b EXT_INT4 External interrupt 4

00101b EXT_INT5 External interrupt 5

00110b EXT_INT6 External interrupt 6

00111b EXT_INT7 External interrupt 7

01000b EDMA_INT EDMA channel (0-15) interrupt

01001-01011b Reserved

01100b XINT0 McBSP0 transmit interrupt

01101b RINT0 McBSP0 receive interrupt

01110b XINT1 McBSP1 transmit interrupt

01111b RINT1 McBSP1 receive interrupt

10000-11111b Reserved

從中得到定時器1的中斷選擇碼為00010。

MUXH和MUXL的寄存器定義如下:(也可以通過幫助得到)

MUXH

位 中斷來源

30-26 INTSEL15

25-21 INTSEL14

20-16 INTSEL13

14-10 INTSEL12

9-5 INTSEL11

4-0 INTSEL10

31,15 保留,填

MUXL

位 中斷來源

30-26 INTSEL9

25-21 INTSEL8

20-16 INTSEL7

14-10 INTSEL6

9-5 INTSEL5

4-0 INTSEL4 //中斷INT4的中斷來源,選擇定時器中斷

31,15 保留,填

因此,我們設(shè)置MUXH的第4-0位為定時器1的中斷選擇碼00010,其余位可以任意設(shè)置(在此可以填1)。轉(zhuǎn)換為16進(jìn)制后,設(shè)置如下:

*( volatile unsigned int* )MUXH=0x7fff7fe2;

MUXL可以不設(shè)置。

開啟中斷到IE10,使能全局中斷:

IER |= 0x0000 0402; // IE10=1

CSR |= 0x00000001; // 全局中斷使能

以上就完成了中斷參數(shù)的配置,中斷啟動并且可以進(jìn)入了。下面是中斷的處理過程。主要分為設(shè)計中斷向量表和中斷處理函數(shù)。

我們可以從DSP CCS的示例中復(fù)制一份向量表的雛形。例如\CCStudio_v3.1\tutorial\dsk6416\hello1\vectors.asm

將其拷貝到本工程目錄下并加入工程中。

中斷向量表包含了16個中斷處理單元,每個單元限制必須是8條指令。如果不夠8條,可以用nop填充,(但nop 4算1條語句),如果服務(wù)程序過多,那么可以制作專門的中斷服務(wù)程序,此時此表只起到跳轉(zhuǎn)作用,這樣CPU就可以正確尋址找到正確的中斷服務(wù)入口。

首先分析一下此文件。

文件開始定義了一個宏,用于處理未用到的中斷。

unused .macro id

.global unused:id:

unused:id:

b unused:id: ; nested branches to block interrupts

nop 4

b unused:id:

nop

nop

nop

nop

nop

它的做法是讓程序進(jìn)入死循環(huán),我認(rèn)為這種做法未必最優(yōu),因此我建議使用直接返回的方式。返回到被中斷地址,對于可屏蔽中斷為b irp,因此將此宏部分替換成,注意一定要湊夠8條。

unused .macro id

.global unused:id:

unused:id:

b irp

nop

nop

nop

nop

nop

nop

nop

.endm

這樣,即使我們誤開啟了此中斷,也會順利返回。當(dāng)然,如果我們確信的確沒有開啟,那么其內(nèi)容是無意義的。

代碼的正文部分用了一系列unused n來插入此宏,起到占地的作用。

由于NMI的返回與可屏蔽中斷不同,它在向量表中位于RESET之下,即unused 1,我們將其刪除,替換為

NMI: b irp

nop

nop

nop

nop

nop

nop

nop

為了實(shí)現(xiàn)定時器1中斷的處理,我們將unused 10刪除,替換為我們自己的中斷跳轉(zhuǎn)程序,如下:

INT10:

stw b0,*--b15

mvkl _xint0_isr,b0

mvkh _xint0_isr,b0

b b0

ldw *b15++,b0

nop 3

nop

nop

另外,需要和語句:

.ref _c_int00 ; C entry point

類似,添加處理程序的引用

.ref _xint0_isr ; timer 1 interrupt handler

由于中斷向量表的位置需要特定指明,且應(yīng)對齊到400H,在此文件中,已經(jīng)定義了段名:

.sect “.vectors”

因此我們需要將此.vector代碼段掛載到專門的一段指定內(nèi)存區(qū)域。

修改link.cmd 鏈接文件,加入INT區(qū)域,起點(diǎn)為地址。其大小為400H,將原先的ISRAM起始點(diǎn)修改。并將SECTIONS中的.vector指向自己定義的內(nèi)存區(qū)域。

MEMORY

{

INT : origin = 0x00000000, len = 0x0000400

ISRAM : origin = 0x00000400, len = 0x1000000

}

SECTIONS

{

.vectors 》 INT

}

中斷向量表設(shè)置、安裝完畢。

最后,設(shè)計中斷服務(wù)函數(shù),在main.c中添加:

interrupt void xint0_isr(void)

{

}

注意,一定要標(biāo)識interrupt關(guān)鍵字,用于產(chǎn)生中斷返回語句b irp,同時,此函數(shù)的入口參數(shù)和出口參數(shù)應(yīng)為void。如果需要更新變量,可以通過全局變量的方式。

另外,C語言函數(shù)名稱與匯編相差一個“_”,請?jiān)谠O(shè)計中斷向量表時注意添加。

經(jīng)過上述步驟,整個定時器中斷的制作過程就完成了。此時可以在interrupt void xint0_isr(void)上添加一個斷點(diǎn),運(yùn)行后應(yīng)該停在此處。如果進(jìn)入失敗,可以先在vector.asm的INT10:stw b0,*--b15一句上設(shè)置斷點(diǎn),如果沒有進(jìn)入此處,證明中斷沒有進(jìn)來,可以檢查是否在參數(shù)設(shè)置上出現(xiàn)了問題。

五、 外部中斷設(shè)計

DSP6000系列提供了INT4-7四個中斷輸入管腳,因此可以通過此四個管腳的輸入電平變化實(shí)現(xiàn)外部中斷。對于電平變化的極性,分為高到低,低到高兩種,因此,DSP采用寄存器EXTPOL來設(shè)置。EXTPOL只有低4位有效,分別代表INT4-7,對于每個位有:

:低-》高產(chǎn)生中斷

1:高-》低產(chǎn)生中斷

因此設(shè)置它即可完成極性變化。

下面,以設(shè)置外部端口INT7中斷,并將其掛載到12號中斷為例,簡述實(shí)現(xiàn)過程:

將12號中斷設(shè)置為外部中斷7,即MUXH(14:10)=00111,此時MUXH設(shè)置為:

*( volatile unsigned int* )MUXH=0x7fff7ce2;//0111 1100 1110 0010

將IER的第12位開啟。

IER |= 0x00001402; // IE10=1 IE12=1

對vectors.asm的unused 12替換為:

INT12:

stw b0,*--b15

mvkl _extint7_isr,b0

mvkh _extint7_isr,b0

b b0

ldw *b15++,b0

nop 3

nop

nop

并添加引用

.ref _extint7_isr

在main.c中加入服務(wù)函數(shù):

interrupt void extint7_isr(void)

{

}

在硬件上,對INT7/GPIO7管腳產(chǎn)生一個低-》高的信號,則可以觸發(fā)出中斷。

若改變此極性,可以設(shè)置EXTPOL第四位為1:

*( volatile unsigned int* )EXTPOL|= 0x00000008;

此時,一個高-》低的信號可以產(chǎn)生中斷。

需要注意的是,如果你對GPIO進(jìn)行過初始化,一定要保證GPEN的中斷引腳相應(yīng)位為1。如全部使能:

*(volatile unsigned int* )GPEN = 0x000000F0;

六、 MCBSP串口接收中斷設(shè)計

在實(shí)際應(yīng)用過程中,經(jīng)常需要通過中斷接收串口數(shù)據(jù)。在此假設(shè)添加MCBSP0接收中斷到11號。

首先,將MCBSP0別名添加到global.h文件。

設(shè)置MCBSP0參數(shù)并啟用,其初始化函數(shù)為:

void MCBSP0_Init(void)

{

*( volatile unsigned int* )McBSP0_SPCR = 0x00000000;

*( volatile unsigned int* )McBSP0_SRGR = 0x200000FF;

*( volatile unsigned int* )McBSP0_PCR = 0x00000800;

*( volatile unsigned int* )McBSP0_XCR = 0x000100A0;

*( volatile unsigned int* )McBSP0_RCR = 0x000100A0;

*( volatile unsigned int* )McBSP0_MCR = 0x00000000;

*( volatile unsigned int* )McBSP0_SPCR |= 0x00C10001;

}

并在main函數(shù)中調(diào)用。

開啟中斷11:

IER |= 0x00001C02; // IE10=1 IE11=1 IE12=1

并將MUXH(9:5)=01101,綜合以上三個中斷,

此時MUXH為: *( volatile unsigned int* )MUXH=0x7fff1da2;//0001 1101 1010 0010

當(dāng)然,如果只考慮現(xiàn)在的中斷,MUXH可以設(shè)置為:

*( volatile unsigned int* )MUXH=0x7fff7dbf;//0111 1101 1011 1111

制作中斷服務(wù)程序,將數(shù)據(jù)取出:

interrupt void rint0_isr(void)

{

int DotRev;

DotRev=*( volatile unsigned int *)McBSP0_DRR;

}

修改vectors.asm,替換unused 11為:

INT11:

stw b0,*--b15

mvkl _rint0_isr,b0

mvkh _rint0_isr,b0

b b0

ldw *b15++,b0

nop 3

nop

nop

添加引用:

.ref _rint0_isr ; mcbsp 0 receive interrupt handler

這時,所有的任務(wù)完成了,可以通過設(shè)置斷點(diǎn)觀察一下接收的數(shù)值。

另外需要注意一定要在服務(wù)程序中將數(shù)據(jù)取出,否則會停止接到新的數(shù)據(jù)。

七、 其他話題

1.設(shè)置中斷向量表起始位置

上文討論的都是將中斷向量表放置在地址,如果需要放置到任意地址(以400H對齊),那么就需要提供向量表起始地址。

比如我們的終端向量位置:INT設(shè)置為:

MEMORY

{

INT : origin = 0x00000400, len = 0x0000400

ISRAM : origin = 0x00000800, len = 0x1000000

}

那么我們在初始化中斷時,應(yīng)設(shè)置:

ISTP=0x00000400;

2.查看現(xiàn)在的中斷位圖

可以查看中斷標(biāo)志寄存器IFR相應(yīng)位(15:0)看是否有中斷到達(dá)。

3.清除/設(shè)置原先的中斷

如果需要清除原先的中斷,可以通過對ICR寄存器相應(yīng)位置位。如果希望人工觸發(fā)中斷,可以設(shè)置ISR寄存器相應(yīng)位置位,它們將更新IFR位圖。

比如,我們在定時器中斷服務(wù)程序中,通過設(shè)置ISR的第12位,人工觸發(fā)外部INT7的12號中斷。

interrupt void xint0_isr(void)

{

ISR=0x00001000;

}

那么CPU將執(zhí)行extint7_isr(void)處理此中斷。

又比如,在上例的外部中斷中,有時會出現(xiàn)剛一開機(jī),沒有發(fā)送信號就有中斷進(jìn)來的情況,那么怎樣克服呢?可以通過ICR克服。對ICR置位可以清除可屏蔽中斷。對應(yīng)位有效。比如在設(shè)置中斷初始化時清除所有原先的中斷。那么可以加入語句:

ICR =0xffffffff;

4.DSP/BIOS下的中斷設(shè)置

在DSP/BIOS管理下,我們不需要自己設(shè)定中斷向量表,以及中斷初始化等等,一切通過BIOS的圖形化設(shè)置即可完成。

添加一個DSP/BIOS

選擇File-》New,在本測試下選擇DSK6416,讀者可根據(jù)自己實(shí)際需要選取。保存為Configuration1.cdb。

將其添加到工程。

如上例需求,選擇HWI的10,11,12號中斷,右鍵選擇Properties分別填寫如下參數(shù):

HWI_INT10 interrupt source=Timer_1 =_xint0_isr(注意下劃線!)

HWI_INT11 interrupt source=MCSP_0_Receive =_rint0_isr

HWI_INT11 interrupt source=External_Pin_7 =_extint7_isr

在main函數(shù)中可以通過同樣的方法啟動中斷。

IER |= 0x00001C02; // IE10=1 IE11=1 IE12=1

CSR |= 0x00000001; //全局中斷使能

至此配置完畢。

5.中斷進(jìn)不來怎樣檢查?

首先檢查是否設(shè)置IER相應(yīng)位開啟,CSR最低位置位,其次看看中斷向量表地址是否設(shè)置正確。如果確認(rèn)無誤。在向量表中斷應(yīng)當(dāng)進(jìn)入的位置設(shè)定斷點(diǎn)。運(yùn)行看是否執(zhí)行到斷點(diǎn)。如果有,那么看看中斷服務(wù)程序有沒有執(zhí)行到。如果中斷只進(jìn)來一次后就再也無法進(jìn)入了,可以查看中斷向量表是否能返回到原程序,如果不能返回,查看是否是8條語句。另外可以通過跟蹤查看b irp語句是否被執(zhí)行。如果可以正常返回到原程序,例如串口接收,看看是否沒有取值導(dǎo)致阻塞。如果是這樣需要將原先值取出才有新的中斷。

6.中斷若干寄存器的說明到哪里去找?

可以通過Help-》Contents,搜索關(guān)鍵字的方法得到。也可以參考官方文檔。

結(jié)語

關(guān)于TMS320C6000的相關(guān)介紹就到這了,如有不足之處歡迎指正。

相關(guān)閱讀推薦:tms320c6000系列dsp編程工具與指南

相關(guān)閱讀推薦:基于TMS320C6000系列DSP的維特比譯碼程序優(yōu)化設(shè)計

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • dsp
    dsp
    +關(guān)注

    關(guān)注

    552

    文章

    7962

    瀏覽量

    348255
  • TMS320C6000
    +關(guān)注

    關(guān)注

    0

    文章

    93

    瀏覽量

    15738
收藏 人收藏

    評論

    相關(guān)推薦

    急求TMS320C6000系列DSP的書

    麻煩大神們推薦本TMS320C6000系列DSP的書,要里面程序多些的應(yīng)用書籍,之前學(xué)過只有理論的。還有有關(guān)DSP匯編編程的書,謝謝各位了
    發(fā)表于 11-09 23:42

    TMS320C6000系列DSP的CPU與外設(shè)

    介紹TMS320C6000系列DSP的CPU與外設(shè),一共有3個部分
    發(fā)表于 05-15 09:00

    請問TMS320C6000系列dsp的未使用管腳如何處理?

    TMS320C6000系列的dsp(比如TMS320C6416)的未使用管腳如何處理?
    發(fā)表于 01-14 08:08

    TMS320C6000資料

    TMS320C6000資料
    發(fā)表于 03-25 16:00 ?76次下載

    TMS320C6000 系列DSP 的C 代碼優(yōu)化方法

    TMS320C6000 系列DSP 的C 代碼優(yōu)化方法
    發(fā)表于 05-15 14:36 ?31次下載

    TMs320C6000系列DSPs原理與應(yīng)用

    TMs320C6000系列DSPs原理與應(yīng)用
    發(fā)表于 05-09 10:59 ?48次下載

    TMS320C6000 Optimizing Compiler

    TMS320C6000 Optimizing Compiler v7.4
    發(fā)表于 08-08 18:27 ?18次下載

    TMS320C6000 Programmer’s Guide

    TMS320C6000 Programmer’s Guide
    發(fā)表于 08-08 18:27 ?33次下載

    基于TMS320C6000系列DSP的Flash編程方法

    基于TMS320C6000系列DSP的Flash編程方法
    發(fā)表于 10-19 11:37 ?7次下載
    基于<b class='flag-5'>TMS320C6000</b><b class='flag-5'>系列</b>DSP的Flash編程方法

    TMS320C6000系列DSP主機(jī)引導(dǎo)方式的實(shí)現(xiàn)

    TMS320C6000系列DSP主機(jī)引導(dǎo)方式的實(shí)現(xiàn)
    發(fā)表于 10-20 09:19 ?16次下載
    <b class='flag-5'>TMS320C6000</b><b class='flag-5'>系列</b>DSP主機(jī)引導(dǎo)方式的實(shí)現(xiàn)

    基于TMS320C6000的優(yōu)化策略分享

    分享到:標(biāo)簽:TMS320C6000 優(yōu)化編程 DSP 1 TMS320C6000的硬件設(shè)計和指令系統(tǒng) TMS320C6000系列DSP(數(shù)字信號處理器)是TI公司最新推出的一種并行處
    發(fā)表于 10-25 11:48 ?2次下載
    基于<b class='flag-5'>TMS320C6000</b>的優(yōu)化策略分享

    TMS320C6000系列DSP優(yōu)化介紹

    TMS320C6000系列數(shù)字信號處理器(DSP)有很多優(yōu)點(diǎn),使建筑它們是計算密集型實(shí)時應(yīng)用的理想選擇。
    發(fā)表于 04-17 08:43 ?6次下載
    <b class='flag-5'>TMS320C6000</b><b class='flag-5'>系列</b>DSP優(yōu)化介紹

    TMS320C6000 EMIF到TMS320C6000主機(jī)端口接口

    電子發(fā)燒友網(wǎng)站提供《TMS320C6000 EMIF到TMS320C6000主機(jī)端口接口.pdf》資料免費(fèi)下載
    發(fā)表于 10-26 10:26 ?0次下載
    <b class='flag-5'>TMS320C6000</b> EMIF到<b class='flag-5'>TMS320C6000</b>主機(jī)端口接口

    TMS320C6000 DMA示例應(yīng)用程序

    電子發(fā)燒友網(wǎng)站提供《TMS320C6000 DMA示例應(yīng)用程序.pdf》資料免費(fèi)下載
    發(fā)表于 10-26 10:17 ?0次下載
    <b class='flag-5'>TMS320C6000</b> DMA示例應(yīng)用程序

    TMS320C6000 DSP的復(fù)位電路

    電子發(fā)燒友網(wǎng)站提供《TMS320C6000 DSP的復(fù)位電路.pdf》資料免費(fèi)下載
    發(fā)表于 10-28 10:36 ?0次下載
    <b class='flag-5'>TMS320C6000</b> DSP的復(fù)位電路