因在TIM寄存器TIEM模式下用到中断,因此学习TC275中断的工作过程。
中断处理函数,该函数调用三个 参数,后两个分别为中断服务者CPU0和中断优先级。调用中断向量表只需要优先级就可以了,可以直接地址偏移得到中断入口。第一个参数就不是我们之前说的地址空间了,事实上该参数调用的是中断服务函数。
IFX_INTERRUPT(STM_Int0Handler, 0, ISR_PRIORITY_STM_INT0);
中断代码如下:
IFX_INTERRUPT(STM_Int0Handler, 0, ISR_PRIORITY_STM_INT0);
void STM_Int0Handler(void)
{boolean interruptState = IfxCpu_disableInterrupts();IfxStm_clearCompareFlag(g_Stm.stmSfr, g_Stm.stmConfig.comparator);// 100000000/1000, TimeConst_1s = stmFrq = 100 000 000IfxStm_increaseCompare(g_Stm.stmSfr, g_Stm.stmConfig.comparator, (100 *1000000*timerINT_us));IfxCpu_restoreInterrupts(interruptState);IfxCpu_enableInterrupts();rt_OneStep();g_Stm.counter++;if (g_Stm.counter > 2) {g_Stm.counter = 0;}
}
在中断系统中填写中断信息,且有额外的中断处理函数实现真正的中断处理。
直接在系统中断中进行中断处理时STM_Int0Handler
是随便定义的。
额外定义中断函数,则函数名为系统中断函数的参数,可实现中断处理函数的调用。通过系统中断查到中断地址,然后直接跳转到额外定义的中断处理函数,占用系统中断的仅仅是查询,减少系统中断的调用。