日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

TI C64X DSP中断向量表的配置(硬件中断)-- 转自新浪博客

發(fā)布時間:2024/4/11 编程问答 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 TI C64X DSP中断向量表的配置(硬件中断)-- 转自新浪博客 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

1. 編寫中斷服務(wù)例程

在.c源文件中編寫ISR函數(shù)c_intXX,用于中斷處理,如:

interrupt void c_intXX (void)

{

…;

}

注:對于硬件中斷而言,XX = 00~15。

2.初始化中斷向量表,并在內(nèi)存段中的中斷向量表中配置好對應(yīng)的中斷向量

首先是把中斷向量表定位到某一內(nèi)存段中,我們可以在cmd文件中配置中斷向量表的內(nèi)存映射,如:

MEMORY

{

VECTORS: org = 00000000h, len = 00000400h

L2SRAM: org = 00000400h, len = 00100000h

SDRAM: org = 80000000h, len = 10000000h

}

SECTIONS

{

.vecs :> VECTORS

.data :> L2SRAM

.text :> L2SRAM

.switch :> L2SRAM

.stack :> L2SRAM

.bss :> L2SRAM

.cinit :> L2SRAM

.far :> L2SRAM

.cio :> L2SRAM

.const :> L2SRAM

.sysmem :> SDRAM

.tables :> L2SRAM

}

?

然后建立一個.asm文件,用以配置中斷向量表中的中斷向量,我們需要聲明一些全局變量,以便其他源文件可以引用這些變量或者引用其他源文件的變量,如:

.global _vectors

.global _c_int00

.global _vector1

.global _vector2

.global _vector3

.global _vector4

.global _vector5

.global _vector6

.global _vector7

.global _c_int08 ; 對應(yīng)main()函數(shù)的c_int08中斷服務(wù)例程(假設(shè)處理的是EDMA中斷)

.global _vector9

.global _vector10

.global _vector11

.global _vector12

.global _vector13

.global _vector14

.global _vector15

?

因為引用了rts的_c_int00中斷,即RESET中斷,因此需要引入這個符號:

.ref _c_int00

?

為了把中斷服務(wù)例程的地址,即中斷向量插入到中斷向量表中,可以定義一個宏:

VEC_ENTRY .macro addr

STW B0,*--B15

MVKL addr,B0

MVKH addr,B0

B B0

LDW *B15++,B0

NOP 2

NOP

NOP

.endm

?

為了初始化中斷向量表中的中斷向量,可以定義一個虛擬的中斷向量:

_vec_dummy:

B B3

NOP 5

?

接下來就可以配置中斷向量表了:

.sect “.vecs”

.align 1024

_vectors:

_vector0: VEC_ENTRY _c_int00 ;RESET中斷

_vector1: VEC_ENTRY _vec_dummy ;NMI不可屏蔽中斷

_vector2: VEC_ENTRY _vec_dummy ;保留中斷1

_vector3: VEC_ENTRY _vec_dummy ;保留中斷2

_vector4: VEC_ENTRY _vec_dummy ;外部中斷INT4

_vector5: VEC_ENTRY _vec_dummy ;外部中斷INT5

_vector6: VEC_ENTRY _vec_dummy ;外部中斷INT6

_vector7: VEC_ENTRY _vec_dummy ;外部中斷INT7

_vector8: VEC_ENTRY _c_int08 ; EDMA控制器中斷EDMAINT,對應(yīng)于c_int08 ISR

_vector9: VEC_ENTRY _vec_dummy;JTAGRTDX中斷

_vector10: VEC_ENTRY _vec_dummy;EMIF_SDRAM_Timer中斷

_vector11: VEC_ENTRY _vec_dummy;McBSP_0_Receive中斷

_vector12: VEC_ENTRY _vec_dummy;McBSP_1_Transmit中斷

_vector13: VEC_ENTRY _vec_dummy;Host_Port_Host_to_DSP中斷

_vector14: VEC_ENTRY _vec_dummy;Timer0中斷

_vector15: VEC_ENTRY _vec_dummy;Timer1中斷

3. 在C程序中指定定義的中斷向量表,并且啟用CPU中斷功能

在C程序中,用CSL的IRQ模塊來設(shè)置中斷比較方便,在設(shè)置之前,需要外部鏈接上面的asm程序的中斷向量表符號:

extern far void vectors();//之所以為vectors,因為C編譯器編譯后自動改名其為_vectors

引用了中斷向量表之后,就可以設(shè)置中斷了:

IRQ_setVecs(vectors); //指向asm中定義的中斷向量表

IRQ_nmiEnable();

IRQ_globalEnable();

IRQ_map(IRQ_EVT_EDMAINT, 8); //映射事件到指定的物理中斷號

IRQ_reset(IRQ_EVT_EDMAINT);

4.啟動中斷源,如EDMA控制器的中斷

至此,中斷服務(wù)例程c_int8就可以為EDMAINT中斷服務(wù)了,其它硬件中斷向量的配置同理。

在CCS里面,通過DSP/BIOS的配置,我們可以很方便的設(shè)置自己想要的對象,進(jìn)行初始化,簡化了很多底層的步驟。

DSP/BIOS硬中斷創(chuàng)建的一般步驟:

1. DSP/BIOS->Scheduling->HWI->HWI_INT(x);
2. 在HWI_INT(X)屬性的function中填入你要觸發(fā)的中斷處理,如_hwiFunc,并選中Dispatcher;
3. 開啟硬中斷對象:
IRQ_reset(IRQ_EVT_EXTINT5);
IRQ_enable(IRQ_EVT_EXTINT5);
4. 編寫硬中斷處理程序hwifunc();
void hwifunc(void){}

轉(zhuǎn)載于:https://www.cnblogs.com/chenchenluo/archive/2012/11/27/2790898.html

總結(jié)

以上是生活随笔為你收集整理的TI C64X DSP中断向量表的配置(硬件中断)-- 转自新浪博客的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。