硬件环境:DM3730评估板 + TRACE32调试器
软件环境:GNU
嗨,
我要将异常中断向量表重定向到指定位置,方法如下:
get_vbase: MRC p15, 0, r0, c12, c0, 0 mov pc, lr set_vbase: MCR p15, 0, r0, c12, c0, 0 mov pc, lr
通过get_vbase得到基地址是0x14000,我把自定义的handler放入这块向量表中后,该handler被执行了!
然后通过set_vbase重定向到RAM的一个数组中,数组中也保存了向量表,这个handler没有执行,并且发现 PC 执行 0 地址处,请教各位这是什么原因?
从DM3730手册上看 0x14000 是内部ROM的起始地址。
Tao Han:
Hi Kavin:
猜想你看过TI的TRM,Table 2-1 Global memory space mapping 中指明了0x40014000 是片内ROM的起始地址。
在表中说明了0x40014000 到0x4001BFFF 是32位可执行的只读区,个人认为你自己的中断向量是写不尽这个区域,你看看是不是由于写入出错导致ARM 重启又跳到了ROM代码开头重新执行了?即使你用外部NOR来引导,ROM部分也会先执行。( 26.4.7.3有说明)所以这个ROM是跳不过去的。
Thanks!
Han Tao