中斷向量的位置已經在 Linker 的 GLD 檔裡有設定了,只要定義的名稱與 GLD 的中斷名稱一樣這樣就可以使用中斷程式了,如下所示是使用 INT1 的中斷方式:
void _ISR _INT1Interrupt(void) // INT1 中斷函數
{
:
:
}
GLD 檔案裡對中斷向量的名稱設定: (參考 C:\Program Files\Microchip\MPLAB C30\support\gld\p30f4011.gld)
/*
** Section Map for Interrupt Vector Tables
*/
SECTIONS
{
/*
** Primary Interrupt Vector Table
*/
.ivt __IVT_BASE :
{
LONG(DEFINED(__ReservedTrap0) ? ABSOLUTE(__ReservedTrap0) :
ABSOLUTE(__DefaultInterrupt));
LONG(DEFINED(__OscillatorFail) ? ABSOLUTE(__OscillatorFail) :
ABSOLUTE(__DefaultInterrupt));
LONG(DEFINED(__AddressError) ? ABSOLUTE(__AddressError) :
ABSOLUTE(__DefaultInterrupt));
LONG(DEFINED(__StackError) ? ABSOLUTE(__StackError) :
ABSOLUTE(__DefaultInterrupt));
LONG(DEFINED(__MathError) ? ABSOLUTE(__MathError) :
ABSOLUTE(__DefaultInterrupt));
LONG(DEFINED(__ReservedTrap5) ? ABSOLUTE(__ReservedTrap5) :
ABSOLUTE(__DefaultInterrupt));
LONG(DEFINED(__ReservedTrap6) ? ABSOLUTE(__ReservedTrap6) :
ABSOLUTE(__DefaultInterrupt));
LONG(DEFINED(__ReservedTrap7) ? ABSOLUTE(__ReservedTrap7) :
ABSOLUTE(__DefaultInterrupt));
LONG(DEFINED(__INT0Interrupt) ? ABSOLUTE(__INT0Interrupt) :
ABSOLUTE(__DefaultInterrupt));
LONG(DEFINED(__IC1Interrupt) ? ABSOLUTE(__IC1Interrupt) :
ABSOLUTE(__DefaultInterrupt));
:
: