TI C64X DSP中斷向量表的配置(硬體中斷)

2021-05-26 01:35:59 字數 3909 閱讀 1362

收藏1. 編寫中斷服務例程

在.c原始檔中編寫isr函式c_intxx,用於中斷處理,如:

interrupt void c_intxx (void)

注:對於硬體中斷而言,xx = 00~15。

2.初始化中斷向量表,並在記憶體段中的中斷向量表中配置好對應的中斷向量

首先是把中斷向量表定位到某一記憶體段中,我們可以在cmd檔案中配置中斷向量表的記憶體對映,如:

memory

sections

然後建立乙個.asm檔案,用以配置中斷向量表中的中斷向量,我們需要宣告一些全域性變數,以便其他原始檔可以引用這些變數或者引用其他原始檔的變數,如:

.global _c_int00

.global _vector1

.global _vector2

.global _vector3

.global _vector4

.global _vector5

.global _vector6

.global _vector7

.global _c_int08; 對應main()函式的c_int08中斷服務例程(假設處理的是edma中斷)

.global _vector9

.global _vector10

.global _vector11

.global _vector12

.global _vector13

.global _vector14

.global _vector15

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

.ref      _c_int00

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_vector2:       vec_entry _vec_dummy_vector3:       vec_entry _vec_dummy_vector4:       vec_entry _vec_dummy ;外部中斷int4

_vector5:       vec_entry _vec_dummy ;外部中斷int5

_vector6:       vec_entry _vec_dummy_vector7:       vec_entry _vec_dummy ;外部中斷int7

_vector8:       vec_entry _c_int08 ;_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模組來設定中斷比較方便,在設定之前,需要外部鏈結上面的asm程式的中斷向量表符號:

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

引用了中斷向量表之後,就可以設定中斷了:

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

irq_nmienable();

irq_globalenable();

irq_map(irq_evt_edmaint, 8);//對映事件到指定的物理中斷號

irq_reset(irq_evt_edmaint);

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

至此,中斷服務例程c_int8就可以為edmaint中斷服務了,其它硬體中斷向量的配置同理。

在ccs裡面,通過dsp/bios的配置,我們可以很方便的設定自己想要的物件,進行初始化,簡化了很多底層的步驟。

dsp/bios硬中斷建立的一般步驟:

1. dsp/bios->scheduling->hwi->hwi_int(x);

2. 在hwi_int(x)屬性的function中填入你要觸發的中斷處理,如_hwifunc,並選中dispatcher;

3. 開啟硬中斷物件:

irq_reset(irq_evt_extint5);

irq_enable(irq_evt_extint5);

4. 編寫硬中斷處理程式hwifunc();

void hwifunc(void){}

TI C64X DSP中斷向量表配置 硬體中斷

ti c64x dsp中斷向量表配置 硬體中斷 2007 04 09 11 29 1.編寫中斷服務例程 在.c原始檔中編寫isr函式c intxx,用於中斷處理,如 interrupt void c intxx void 注 對於硬體中斷而言,xx 00 15。2 初始化中斷向量表,並在記憶體段中的...

ARM的啟動和中斷向量表

對於s3c2440而言,啟動的方式有兩種,一是nor flash方式啟動,二是nand flash方式啟動。nor flash的位址範圍如下 0x0000.0000 0x0800.0000 2m nor flash 片內的bootsram位址被置為 0x4000.0000 0x4000.dfff 4...

Note 使用RAM中斷向量表的常規方法

記錄下使用ram中斷向量表的常規寫法 首先需要在link檔案中指定vector rom及vector ram的位置,vector rom m interrupts start m interrupts size 在map檔案中有如下定義後可以在c 中引申這些變數定義值 extern uint32 t...