在iar rh850编译器上忽略#pragma vector指令

时间:2014-02-19 09:41:22

标签: interrupt-handling iar

我正在使用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,这是正确的。但是从这个位置跳转是不正确的 - 看起来链接器忽略了我的自定义处理程序。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

您需要为要通过表调用的每个ISR设置相应中断控制寄存器(ICCxxxx)中的TB位,或修改默认处理程序以确定要调用哪个ISR并在默认情况下调用它处理程序。从你的问题描述,我想你想使用表方法(在相应的ICC中断控制寄存器中设置相应的TB位。