Board logo

标题: 求助:S12X中断重映射,程序跑飞 [打印本页]

作者: toumingse    时间: 2010-6-18 18:15     标题: 求助:S12X中断重映射,程序跑飞

大家好,我在用MC9S12XDT256这个片子来实现Flash Bootloader。需要用到中断重映射的功能,但是,我试着去try,发现有问题。现发一个附件,大家看看。
试验如下:

1. when I add this code "IVBR = 0x7Fu;" to main.c , this project is always reset.
2. when I delete this code "IVBR = 0x7Fu;" this project is running correctly.
main.c如下:

unsigned char test_flag = 0;
void main(void) {
   /* put your own code here */
  TSCR2 |= 0x84u; /* 16 Prescale Factor */
  TSCR1 |= 0x80u; /* start timer */
  //IVBR = 0x7F;   /* delte this code ,the code is OK */
  EnableInterrupts;
  for(;;) {} /* wait forever */
  /* please make sure that you never leave this function */
}
#pragma CODE_SEG NON_BANKED
#pragma TRAP_PROC SAVE_ALL_REGS
void ECT_OVERLOW(void)
{
      test_flag++;
      
      if(test_flag == 3)
      {
        for(;;);
      }
}
#pragma CODE_SEG DEFAULT


附件: interupt_vector_relocate.rar (2010-6-18 18:15, 309.35 KB) / 下载次数 330
http://bbs.eccn.com/attachment.php?aid=8714&k=12977d5255f9a2803c030cd4cf02b049&t=1716060068&sid=84267C
作者: eee333    时间: 2011-3-31 20:25

我也想知道
你解决了没
作者: eee333    时间: 2011-3-31 21:04

void ECT_OVERLOW(void)
{
      test_flag++;
      
      if(test_flag == 3)
      {
        for(;;);
      }
}

如果这是中断程序的话,那你就写错了啊。要加中断关键字的
作者: limcgh    时间: 2012-5-31 23:58

感觉你应该在你的PRM文件中加入中断程序的入口地址 VECTOR ADDRESS 0X(XXXX) ECT_OVERLOW.
或者采用void interrupt 中断号 ECT_OVERLOW()的方式定义中断程序。
作者: zephanshaka    时间: 2012-6-12 23:57

#pragma TRAP_PROC已经告诉编译器这个是中断函数,所以不需要再加interrupt关键字了。
这个问题需要将中断地址重新定义一下。重映射实际上需要两套中断地址,你的这个只能将ECT_OVERLOW映射到默认的地址,所以重映射后就定位不到那个中断了。因为prm文件是链接文件是在编译之后做的,所以在里面定义中断入口对重映射来说没有用,而应该在prm里面划出两套中断向量的地址,然后在程序中通过#pragma 指定到对应的地址。
作者: limcgh    时间: 2012-6-28 00:16

修改PRM文件, 在prm文件最后一行添加 VECTOR ADDRESS 0x7FD6 ECT_OVERLOW
我试过应该可以运行。如果有问题再发帖讨论。




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0