收藏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...