//#####################################################################
//文件: DSP281x_PieVect.c
//說明: DSP281x 芯片 PIE 中斷向量表初始化程序
//#####################################################################
#include "DSP281x_Device.h"
#include "DSP281x_Examples.h"
const struct PIE_VECT_TABLE PieVectTableInit = {
//定義一個結構體類型PIE_VECT_TABLE的結構體變量PieVectTableInit,并給元素賦初
//值,其元素初值為其對應的默認中斷向量服務程序的起始地址(函數名)
//在DSP281x_DefaultIsr.c里面都有定義
PIE_RESERVED, //保留,復位總是取自BROM或XINTF7區的0x3F FFC0
PIE_RESERVED, //保留,見PIE組1
PIE_RESERVED, //保留,見PIE組2
PIE_RESERVED, //保留,見PIE組3
PIE_RESERVED, //保留,見PIE組4
PIE_RESERVED, //保留,見PIE組5
PIE_RESERVED, //保留,見PIE組6
PIE_RESERVED, //保留,見PIE組7
PIE_RESERVED, //保留,見PIE組8
PIE_RESERVED, //保留,見PIE組9
PIE_RESERVED, //保留,見PIE組10
PIE_RESERVED, //保留,見PIE組11
PIE_RESERVED, //保留,見PIE組12
//非外設中斷
INT13_ISR, //XINT13(外部中斷13) 或CPU-Timer 1(用BIOS或RTOS)
INT14_ISR, //CPU-Timer2
DATALOG_ISR, //CPU數據記錄中斷
RTOSINT_ISR, //CPU實時操作系統中斷
EMUINT_ISR, //CPU仿真中斷
NMI_ISR, //外部不可屏蔽中斷
ILLEGAL_ISR, //非法操作陷阱
USER1_ISR, //用戶定義軟件中斷1
USER2_ISR, //用戶定義軟件中斷2
USER3_ISR, //用戶定義軟件中斷3
USER4_ISR, //用戶定義軟件中斷4
USER5_ISR, //用戶定義軟件中斷5
USER6_ISR, //用戶定義軟件中斷6
USER7_ISR, //用戶定義軟件中斷7
USER8_ISR, //用戶定義軟件中斷8
USER9_ISR, //用戶定義軟件中斷9
USER10_ISR, //用戶定義軟件中斷10
USER11_ISR, //用戶定義軟件中斷11
USER12_ISR, //用戶定義軟件中斷12
//PIE組1
PDPINTA_ISR, //EV-A
PDPINTB_ISR, //EV-B
rsvd_ISR,
XINT1_ISR,
XINT2_ISR,
ADCINT_ISR, //ADC
TINT0_ISR, //Timer 0
WAKEINT_ISR, //WD
//PIE組2
CMP1INT_ISR, //EV-A
CMP2INT_ISR, //EV-A
CMP3INT_ISR, //EV-A
T1PINT_ISR, //EV-A
T1CINT_ISR, //EV-A
T1UFINT_ISR, //EV-A
T1OFINT_ISR, //EV-A
rsvd_ISR,
//PIE組3
T2PINT_ISR, //EV-A
T2CINT_ISR, //EV-A
T2UFINT_ISR, //EV-A
T2OFINT_ISR, //EV-A
CAPINT1_ISR, //EV-A
CAPINT2_ISR, //EV-A
CAPINT3_ISR, //EV-A
rsvd_ISR,
//PIE組4
CMP4INT_ISR, //EV-B
CMP5INT_ISR, //EV-B
CMP6INT_ISR, //EV-B
T3PINT_ISR, //EV-B
T3CINT_ISR, //EV-B
T3UFINT_ISR, //EV-B
T3OFINT_ISR, //EV-B
rsvd_ISR,
//PIE組5
T4PINT_ISR, //EV-B
T4CINT_ISR, //EV-B
T4UFINT_ISR, //EV-B
T4OFINT_ISR, //EV-B
CAPINT4_ISR, //EV-B
CAPINT5_ISR, //EV-B
CAPINT6_ISR, //EV-B
rsvd_ISR,
//PIE組6
SPIRXINTA_ISR, //SPI-A
SPITXINTA_ISR, //SPI-A
rsvd_ISR,
rsvd_ISR,
MRINTA_ISR, //McBSP-A
MXINTA_ISR, //McBSP-A
rsvd_ISR,
rsvd_ISR,
//PIE組7
rsvd_ISR,
rsvd_ISR,
rsvd_ISR,
rsvd_ISR,
rsvd_ISR,
rsvd_ISR,
rsvd_ISR,
rsvd_ISR,
//PIE組8
rsvd_ISR,
rsvd_ISR,
rsvd_ISR,
rsvd_ISR,
rsvd_ISR,
rsvd_ISR,
rsvd_ISR,
rsvd_ISR,
//PIE組9
SCIRXINTA_ISR, //SCI-A
SCITXINTA_ISR, //SCI-A
SCIRXINTB_ISR, //SCI-B
SCITXINTB_ISR, //SCI-B
ECAN0INTA_ISR, //eCAN
ECAN1INTA_ISR, //eCAN
rsvd_ISR,
rsvd_ISR,
//PIE組10
rsvd_ISR,
rsvd_ISR,
rsvd_ISR,
rsvd_ISR,
rsvd_ISR,
rsvd_ISR,
rsvd_ISR,
rsvd_ISR,
//PIE組11
rsvd_ISR,
rsvd_ISR,
rsvd_ISR,
rsvd_ISR,
rsvd_ISR,
rsvd_ISR,
rsvd_ISR,
rsvd_ISR,
//PIE組12
rsvd_ISR,
rsvd_ISR,
rsvd_ISR,
rsvd_ISR,
rsvd_ISR,
rsvd_ISR,
rsvd_ISR,
rsvd_ISR,
};
//初始化PIE中斷向量表
//這個子程序把PIE中斷向量表初始化到一個已知狀態,這個子程序必須在引導程序后執行
void InitPieVectTable(void)
{
int16 i;
Uint32 *Source = (void *) &PieVectTableInit;
Uint32 *Dest = (void *) &PieVectTable;
//將結構體變量PieVectTableInit的值賦給結構體變量PieVectTable
//注意:兩個為同一個結構體類型PIE_VECT_TABLE
EALLOW;
for(i=0; i < 128; i++)
*Dest++ = *Source++;
EDIS;
//使能PIE中斷向量表
PieCtrlRegs.PIECRTL.bit.ENPIE = 1;
}