[PIC®/AVR®/dsPIC®产品] bootloader中断向量表怎么重映射

[复制链接]
2970|16
 楼主| yoyows 发表于 2020-4-9 14:12 | 显示全部楼层 |阅读模式
PIC24F的片子,在bootloader程序和app程序中都有中断,那在切换到app程序中时怎么重映射中断向量表呢
zlzilla 发表于 2020-4-12 20:40 | 显示全部楼层
可以先参考一下16bit的bootloader,使用MCC可以直接选择要REMAP的中断到Applicaiton。
https://www.microchip.com/SWLibraryWeb/product.aspx?product=16-bit-Bootloader

也可以参考AN1157
https://www.microchip.com/wwwAppNotes/AppNotes.aspx?appnote=en533906
 楼主| yoyows 发表于 2020-4-13 17:39 | 显示全部楼层
zlzilla 发表于 2020-4-12 20:40
可以先参考一下16bit的bootloader,使用MCC可以直接选择要REMAP的中断到Applicaiton。
https://www.microch ...

你可以大概讲解一下app中断向量表跳转过程吗,看AN1157我的个人理解是,bootloader的gld文件中先写好bootloader和app的中断向量表,然后在app程序中调用中断时按地址调用,一种是按void __attribute__((__interrupt__,address(0x3000 + 0x0EC),__no_auto_psv__)) _USB1Interrupt(void)调用,另一种是按void __attribute__ ((address(0x3000 + 0x0EC))) ISRTable()进行跳转的。
zlzilla 发表于 2020-4-13 22:24 | 显示全部楼层
简单的理解就是bootloader将自己的IRQ向量表中要转出去的IRQ,放一个GOTO xxx汇编指令,这个xxx就是Application IRQ的入口地址,所以Bootloader需要知道Application的IRQ表的地址(MCC支持图形化配置相关的地址),这个方法并不需要改gld文件,也是新的16bit bootloader的实现方式。当然如果MCU支持AIVT也可以用直接切中断向量表,这个在application中切就可以了(https://microchipdeveloper.com/faq:2702)

下面是讲解16bit interrupt的文档可以参考。
https://microchipdeveloper.com/16bit:exceptions
http://ww1.microchip.com/downloads/en/DeviceDoc/39707a.pdf
 楼主| yoyows 发表于 2020-4-14 09:53 | 显示全部楼层
zlzilla 发表于 2020-4-13 22:24
简单的理解就是bootloader将自己的IRQ向量表中要转出去的IRQ,放一个GOTO xxx汇编指令,这个xxx就是Applica ...

我用过切换AIVT的方法 ,但是app的中断还是没起来
boot的主程序是这样的:
  1. int main(void)
  2. {
  3.     bool Init;
  4.     INTCON2bits.ALTIVT = 1;
  5.     SYSTEM_Initialize();
  6.     if(_RB5 == 1)  //button press
  7.     {
  8.         INTCON2bits.ALTIVT = 0;
  9.         __asm__("goto 0x3000");
  10.     }
  11.     Init = Initialize();

  12.     while(1)
  13.     {   
  14.         if (Init)
  15.         ProcessCommand();
  16.         else
  17.         {
  18.         }
  19.     }
  20.     return 1;
  21. }

 楼主| yoyows 发表于 2020-4-14 15:52 | 显示全部楼层
在我的boot程序里导入不带中断的app程序运行是正常的,换了带中断的程序就不运行了,有没有大神指导一下
cxque 发表于 2022-6-16 14:49 | 显示全部楼层
yoyows 发表于 2020-4-14 15:52
在我的boot程序里导入不带中断的app程序运行是正常的,换了带中断的程序就不运行了,有没有大神指导一下 ...

楼主问题解决了吗?我现在也用到同样的问题,只要在app中开启了中断,就会导致复位,不开启中断时没有问题。boot中使用以下代码设置中断向量:
asm("psect  intentry,global,class=CODE,delta=2");
asm("pagesel " str(NEW_INTERRUPT_VECTOR)); // 0x1004
asm("GOTO " str(NEW_INTERRUPT_VECTOR));
averyleigh 发表于 2022-6-20 15:22 | 显示全部楼层
这个BootLoader没修改过。   
yeates333 发表于 2022-6-20 15:57 | 显示全部楼层
在手册上是怎么写的?  
cehuafan 发表于 2022-6-20 17:03 | 显示全部楼层
中断向量表网上有吧。   
eepo 发表于 2022-6-24 08:25 | 显示全部楼层
cxque 发表于 2022-6-16 14:49
楼主问题解决了吗?我现在也用到同样的问题,只要在app中开启了中断,就会导致复位,不开启中断时没有问 ...

请问您解决了?我用的是PIC16F15376,遇到同样的问题,现象一样。
usysm 发表于 2023-2-2 15:38 | 显示全部楼层
带BootLoader情况下,需要重新映射中断向量表
1988020566 发表于 2023-2-2 15:47 | 显示全部楼层
中断向量表重映射多次么               
macpherson 发表于 2023-2-8 12:10 | 显示全部楼层
这个中断向量表初始化的就映射好了吧。
mollylawrence 发表于 2023-2-14 10:23 | 显示全部楼层
BootLoader没有修改过。
biechedan 发表于 2023-2-16 17:03 | 显示全部楼层
如何在avr的bootloader中重定位中断向量
ccook11 发表于 2023-2-16 17:32 | 显示全部楼层
bootloader为什么中断向量映射
您需要登录后才可以回帖 登录 | 注册

本版积分规则

10

主题

31

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部