在使用CodeWarrior建立了MCF52259工程以後,系統會生成一個exceptions.c文件,冷火的中斷向量表就在這個文件中。
中斷向量表如下所示:
/* Interrupt vector table */ __declspec(vectortable) vectorTableEntryType _vect[256] = { (vectorTableEntryType)__SP_AFTER_RESET, /* 0 (0x000) Initial supervisor SP */ _startup, /* 1 (0x004) Initial PC */ asm_exception_handler, /* 2 (0x008) Access Error */ asm_exception_handler, /* 3 (0x00C) Address Error */ asm_exception_handler, /* 4 (0x010) Illegal Instruction */ .......... .......... .......... .......... asm_exception_handler, /* 252 (0x___) Reserved */ asm_exception_handler, /* 253 (0x___) Reserved */ asm_exception_handler, /* 254 (0x___) Reserved */ asm_exception_handler, /* 255 (0x___) Reserved */ };
冷火一共有64個中斷源共256個中斷,這些中斷一共分為7個中斷優先級,第7級優先級最高,第1級優先級最低。前64個中斷是保留給處理器處理復位,以及系統的各種異常,後面的64-255 中斷是保留給用戶配置的。
總的來說,冷火的中斷配置過程如下:
1.使能相應的中斷源
2.配置中斷優先級和中斷級別
3.將該中斷的中斷服務程序加入到向量表中。
下面以配置PIT中斷為例說明:
PIT的定時周期計算公式為:
Timeout period=2^PCSRn[PRE]*(PMRn[PM] + 1)/(fsys/2)
/*********************************************** * 配置 1ms中斷 系統頻率 128MHz * ((2*2)*16000)/(128000000/2) = 0.001s ***********************************************/ void PIT_Init(void) { MCF_PIT_PCSR(0)=MCF_PIT_PCSR_PRE(2) |MCF_PIT_PCSR_PIE |MCF_PIT_PCSR_RLD |MCF_PIT_PCSR_OVW |MCF_PIT_PCSR_PIF; MCF_PIT_PMR(0)=(uint16)(16000 - 1); /**************************************** 在中斷向量表119 的位置寫入PIT 中斷服務函數 中斷向量表的位置 = 中斷源號 + 64 配置PIT的中斷級別 55 + 64 = 119 to allow the request to be disabled the IMR is set to all ones by reset ****************************************/ MCF_INTC0_IMRL&=~MCF_INTC_IMRL_MASKALL; //使能PIT中斷 MCF_INTC0_IMRH&=~MCF_INTC_IMRH_INT_MASK55; //配置中斷優先級和中斷級別 MCF_INTC0_ICR55=MCF_INTC_ICR_IP(6)+MCF_INTC_ICR_IL(2); //使能PIT MCF_PIT_PCSR(0)|=MCF_PIT_PCSR_EN; }
最後修改中斷向量表如下:
asm_exception_handler, /* 117 (0x___) Reserved */ asm_exception_handler, /* 118 (0x___) Reserved */ PIT0_handler, /* PIT0中斷 */ asm_exception_handler, /* 120 (0x___) Reserved */ asm_exception_handler, /* 121 (0x___) Reserved */