【NUC972】中断向量表的问题

有际有际 |浏览1391次
收藏|2017/09/30 10:18

现在在做一个NUC972的串口IAP程序。
1、我自己写了一个IAP程序,用来接收串口的APP二进制代码。IAP程序的执行地址是0x0,存放在SPI中0x0开始的地方;
2、现在选择SPI启动,将SPI里面的IAP程序加载到DDR中0x0地址开始的地方运行,并从串口接收APP二进制代码文件,存放到DDR的0x0020 0000的地方。这个APP程序的执行地址也是0x0020 0000;
3、等IAP程序将APP二进制文件接收完成并存放在DDR中0x0020 0000开始的地方之后,再从IAP跳转到地址为0x0020 0000的地方去执行APP程序。

这种情况下,如果APP程序发生中断,系统会跳到哪里去查找中断向量表?能不能找到APP中断服务程序的入口地址?

满意回答

2022/09/06 14:37

ARM9的Vector 我们固定在0x0的地方,所以你如果有多个程序要执行,不能放在地址0的位置,可以放0x8000,0x100000等地址。程序boot的时候,把vector table搬到地址0的位置。

有关向量的使用请参照我们的bsp里的demo程序。例如:如果你用Keil MDK编译程序,script 如下即可

LR_IROM1 0x0008000
{
     EXE_IROM2 +0
     {  ; load address = execution address
          startup.o (NUC_INIT, +First)
          *(InRoot$$Sections)
          .ANY (+RO)
     }
     RW_RAM1 +0;0x200000;+0 
     {  ; RW_RAM1 start address is after EXE_ROM2
          .ANY (+RW +ZI)
     }
     ARM_LIB_HEAP +0 EMPTY 0x4000    ;  0x80000 ; Heap region growing up
     {
     }
     VEC_ROM0 0x00000000  0x8000
     {  ; vector table
          vector.o(VECTOR, +First)
     }
}




tanshi_li

其他回答(0)
1人关注该问题
+1
 加载中...