1.手册上给出了使用中断号写中断服务程序的方法。中断号可以在header文件中找到。如下面的代码:IRQ中断的中断号为”2”。
注意:中断服务程序既不能有参数也不能有返回值。如果在中断中改变变量的值,这个变量应定义为”volatile”。
#define VectorNumber_Virq 2
void interrupt VectorNumber_Virq ISR_myIRQ (void) {
IRQSC_IRQIE = 0; /* Disable IRQ Interrupt */
IRQSC_IRQACK = 1; /* IRQ ACK */
IRQFlag = 1;
}
2.还看到一种写中断向量的方法,不用中断号。
void interrupt isr_TIMOV(void)
{
TSC;
TSC_TOF=0; /* clear interupt flag */
freecnt++;
}
void interrupt UNASSIGNED_ISR(void){
}
void (* const _vect[])() @0xFFDE = { // Interrupt vector table
UNASSIGNED_ISR, /* Int.no. 0 INT_ADC (at FFDE) Unassigned */
UNASSIGNED_ISR, /* Int.no. 1 INT_KBI (at FFE0) Unassigned */
UNASSIGNED_ISR, /* Int.no. 2 Reserved2 (at FFE2) Unassigned */
UNASSIGNED_ISR, /* Int.no. 3 Reserved3 (at FFE4) Unassigned */
UNASSIGNED_ISR, /* Int.no. 4 Reserved4 (at FFE6) Unassigned */
UNASSIGNED_ISR, /* Int.no. 5 Reserved5 (at FFE8) Unassigned */
UNASSIGNED_ISR, /* Int.no. 6 Reserved6 (at FFEA) Unassigned */
UNASSIGNED_ISR, /* Int.no. 7 Reserved7 (at FFEC) Unassigned */
UNASSIGNED_ISR, /* Int.no. 8 Reserved8 (at FFEE) Unassigned */
UNASSIGNED_ISR, /* Int.no. 9 Reserved9 (at FFF0) Unassigned */
isr_TIMOV, /* Int.no. 10 INT_TIMOvr (at FFF2) Unassigned */
UNASSIGNED_ISR, /* Int.no. 11 INT_TIMCH1 (at FFF4) Unassigned */
UNASSIGNED_ISR, /* Int.no. 12 INT_TIMCH0 (at FFF6) Unassigned */
UNASSIGNED_ISR, /* Int.no. 13 Reserved13 (at FFF8) Unassigned */
UNASSIGNED_ISR, /* Int.no. 14 INT_IRQ (at FFFA) Unassigned */
UNASSIGNED_ISR, /* Int.no. 15 INT_SWI (at FFFC) Unassigned */
/* Int.no. 16 INT_RESET (at FFFE) Reset vector */
};