我正在使用IAR RH850编译器,而我正在实现中断例程。看来我已经按书写了一切,但是中断跳转到默认的中断处理程序(循环)而不是我的处理程序。我和其他IAR项目一样,我使用带有向量偏移和#pragma vector
关键字的__interrupt
指令编写了中断例程。
#pragma vector=0x100
__interrupt void ISR_CustomHandler(void)
{
__DI();
InterruptRoutine();
__EI();
}
在头文件中我有:
#include <intrinsics.h>
#pragma language=extended
#include <iorh850.h>
__interrupt void ISR_CustomHandler();
在链接器输出文件中,它看起来像是已注册的(地址是正确的):
___interrupt_0x10 0x0000941c 0x2 Code Wk default_handler.o [4]
___interrupt_0x100 0x000087d0 Code Gb RH850.o [1]
___interrupt_0x101 0x0000941c 0x2 Code Wk default_handler.o [4]
还有什么我应该注意的吗?
开启中断CPU跳转到0x100,这是正确的。但是从这个位置跳转是不正确的 - 看起来链接器忽略了我的自定义处理程序。有什么想法吗?
答案 0 :(得分:0)
您需要为要通过表调用的每个ISR设置相应中断控制寄存器(ICCxxxx)中的TB位,或修改默认处理程序以确定要调用哪个ISR并在默认情况下调用它处理程序。从你的问题描述,我想你想使用表方法(在相应的ICC中断控制寄存器中设置相应的TB位。