void InitPieVectTable(void)
{
int16 i;
Uint32 *Source = (void *) &PieVectTableInit;
Uint32 *Dest = (void *) &PieVectTable;
// Do not write over first 3 32-bit locations (these locations are
// initialized by Boot ROM with boot variables)
Source = Source + 3;
Dest = Dest + 3;
EALLOW;
for(i=0; i < 125; i++)
*Dest++ = *Source++;
EDIS;
// Enable the PIE Vector Table
PieCtrlRegs.PIECTRL.bit.ENPIE = 1;
}
例程中在DSP2803x_GlobalVariableDefs.c中定义了:struct PIE_VECT_TABLE PieVectTable;
又在DSP2803x_PieVect.c中定义了:
const struct PIE_VECT_TABLE PieVectTableInit = {
PIE_RESERVED, // 0 Reserved space
PIE_RESERVED, // 1 Reserved space
PIE_RESERVED, // 2 Reserved space
PIE_RESERVED, // 3 Reserved space
PIE_RESERVED, // 4 Reserved space
PIE_RESERVED, // 5 Reserved space
PIE_RESERVED, // 6 Reserved space
PIE_RESERVED, // 7 Reserved space
PIE_RESERVED, // 8 Reserved space
PIE_RESERVED, // 9 Reserved space
PIE_RESERVED, // 10 Reserved space
PIE_RESERVED, // 11 Reserved space
PIE_RESERVED, // 12 Reserved space
……………………
// Group 12 PIE Vectors
XINT3_ISR, // 12.1 External Interrupt
rsvd_ISR, // 12.2
rsvd_ISR, // 12.3
rsvd_ISR, // 12.4
rsvd_ISR, // 12.5
rsvd_ISR, // 12.6
LVF_ISR, // 12.7 CLA1
LUF_ISR // 12.8 CLA1
};
这个结构体中保存的是相应中断函数的入口地址,我的问题是为什么要通过InitPieVectTable()这个函数将结构地址PIE_VECT_TableInit中的值赋给PieVectTable,而不是直接将中断函数的入口地址赋给PieVectTable?