TI中文支持网
TI专业的中文技术问题搜集分享网站

关于中断服务子程序入口地址问题

想问下TI提供的interrupt.c和intvecs.asm这两个函数怎么确定服务子程序入口地址的。   intcVectorTable具体的地址是由什么去决定的

//interrupt.c部分代码
 void IntDSPINTCInit (void)
{unsigned int step = 0;/* Set ISRs to default "do-nothing" routine */while(step != C674X_INT_COUNT)c674xISRtbl[step++] = IntDefaultHandler;/* Set interrupt service table pointer to the vector table */
#ifdef __TI_EABI__ISTP = (unsigned int)_intcVectorTable;
#elseISTP = (unsigned int)intcVectorTable;// ISTP = (unsigned int)0x00800000;
#endif/* Clear pending CPU maskable interrupts (if any) */ICR = 0xFFF0;/* Enable NMIE bit to allow CPU maskable interrupts */IER = (1 << C674X_NMI);
}



//intvecs.asm代码
;
; File: intvecs.asm
;
; Brief: Contains interrupt vector table and fetch packets
;
; Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/
; ALL RIGHTS RESERVED

;**********************************************************
;				Global Symbols
;**********************************************************
	.global _intcVectorTable
	.global _c_int00
	.global _c674x_nmi_isr
	.global _c674x_rsvd_int2_isr
	.global _c674x_rsvd_int3_isr
	.global _c674x_mask_int4_isr
	.global _c674x_mask_int5_isr
	.global _c674x_mask_int6_isr
	.global _c674x_mask_int7_isr
	.global _c674x_mask_int8_isr
	.global _c674x_mask_int9_isr
	.global _c674x_mask_int10_isr
	.global _c674x_mask_int11_isr
	.global _c674x_mask_int12_isr
	.global _c674x_mask_int13_isr
	.global _c674x_mask_int14_isr
	.global _c674x_mask_int15_isr

;**********************************************************
;				Interrupt Fetch Packet
;**********************************************************
VEC_ENTRY .macro addr
	STW B0,*--B15
	MVKL addr,B0
	MVKH addr,B0
	B B0
	LDW *B15++,B0
	NOP 2
	NOP
	NOP
	.endm

;**********************************************************
;				Interrupt Vector Table
;**********************************************************
	.align 1024
_intcVectorTable:
	VEC_ENTRY _c_int00
	VEC_ENTRY _c674x_nmi_isr
	VEC_ENTRY _c674x_rsvd_int2_isr
	VEC_ENTRY _c674x_rsvd_int3_isr
	VEC_ENTRY _c674x_mask_int4_isr
	VEC_ENTRY _c674x_mask_int5_isr
	VEC_ENTRY _c674x_mask_int6_isr
	VEC_ENTRY _c674x_mask_int7_isr
	VEC_ENTRY _c674x_mask_int8_isr
	VEC_ENTRY _c674x_mask_int9_isr
	VEC_ENTRY _c674x_mask_int10_isr
	VEC_ENTRY _c674x_mask_int11_isr
	VEC_ENTRY _c674x_mask_int12_isr
	VEC_ENTRY _c674x_mask_int13_isr
	VEC_ENTRY _c674x_mask_int14_isr
	VEC_ENTRY _c674x_mask_int15_isr

 

weihua li:

真正的子程序入口是通过后续的注册函数 IntRegister();  实现的。

这里的 intcVectorTable 和 c674xISRtbl[16]数组,是一个东西。在interrupt.c里面你可以看到有这样的调用

interrupt void c6748_mask_int5_isr (viod)

{

        c674xISRtbl[5];

}

注册就是将你的中断入口函数指针放到c674xISRtbl[]数组里面。

yuke yang:

回复 weihua li:

正解,终于明白了,谢谢!!!!

赞(0)
未经允许不得转载:TI中文支持网 » 关于中断服务子程序入口地址问题
分享到: 更多 (0)