最近在做STM8S207的IAP升级,STM8S的中断现在只能在IAP里使能或者在APP里使能,IAP使能了APP就不能用了,据说有方法把中断向量表映射到RAM里去,使得IAP和APP都能使用中断。查了一些资料,主要思路是:系统在发生中断的时候,会最先自动跳转到flash的某个特定地址,那么就让flash的这个地址,填入指令,让cpu跳转到特定的RAM地址,在每次进去程序时,使能总中断前,把ISR的地址填到这个RAM中,之后发生中断,程序就会跳到对应的ISR中。这里有个问题,在跳转到RAM地址上后,往这个RAM地址上写什么代码能让他跳到ISR地址上执行,还有这个ISR地址怎么来?试了下这样的代码:如下
中断来了以后到boot里的对应中断处理程序中,在这里跳转到指定RAM
#pragma vector=0xD
__interrupt void TIM1_UPD_OVF_TRG_BRK_IRQHandler(void)
{
asm("LDW X, SP ");
asm("LD A, $FF");
asm("LD XL, A ");
asm("LDW SP, X ");
asm("JPF $0017DC");
}
APP中做这样处理:
extern void TIM1_UPD_OVF_TRG_BRK_IRQHandler(void);
/* 拷贝中断向量表中的ISR地址到0017DC */
ram_int_vect_p->irq_TIM1_UPD_OVF_TRG_BRK = (isr_type_t) &TIM1_UPD_OVF_TRG_BRK_IRQHandler;
请教大神们,哪里有问题呀
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>