[技术问答]

请教向量页重新映射的问题

[复制链接]
1234|18
手机看帖
扫描二维码
随时随地手机跟帖
k_ryan|  楼主 | 2019-4-11 00:30 | 显示全部楼层 |阅读模式
最近用上了新唐的MCU,向量页重新映射的问题一直无法解决。
#define        APPLICATION_START_ADDR        (0x6000)


__asm  INT32U  spChange(INT32U _sp)
{
    MSR  MSP, r0
    BX   lr
}

void  application_run(void)
{
    typedef void(*app_entry)(void);
    INT32U   *vectorTable = (INT32U *)(APPLICATION_START_ADDR);
    static   INT32U    _sp = 0;
    static   INT32U    _pc = 0;
    static   app_entry  app = 0;

    _sp = vectorTable[0];
    _pc = vectorTable[1];
    SYS_UnlockReg();//解除寄存器写保护
    FMC_ENABLE_ISP();//使能ISP
    app = (app_entry)_pc;
    FMC_SetVectorPageAddr(APPLICATION_START_ADDR);  //重置中断向量表
    spChange(_sp);
    app();
    while(1);
}
将断点设置在app()这个地方的时候,可以看到ISPSTA的VECMAP是0x60(如下图一),应该就是APPLICATION_START_ADDR,看起来是正确的。另外看到sp指针也正常,如图二
图一: 566165cae14281a71b.png        图二: 401845cae14cd46ea0.png

图三是flash的0x6000的数据 888305cae17c5293ae.png

当执行app()后,也能跳转到相应的app,app的代码能正常执行,但中断进入不了。
因为我在app中设置了每隔10ms响应一次SysTick_Handler。
app的代码应该是没问题的,因为我将app的rom起始地址改成从0x00开始,编译后烧录到主板上是正常运行的。
现在将起始地址改成APPLICATION_START_ADDR(即0x6000),反而不行。
所以我怀疑中断向量表没有映射成功。
不知道这里有没有高手指导一下,是不是向量表重新映射是不是还有寄存器需要配置的?
另:现在本人使用的mcu是新唐的NUC029LAN
谢谢!






852705cae14bf7886d.png

使用特权

评论回复
请叫我树人| | 2019-4-11 08:34 | 显示全部楼层
感谢分享啊! 真是不错啊!

使用特权

评论回复
yiyigirl2014| | 2019-4-11 10:56 | 显示全部楼层
是不是有个什么文件里面也要相应修改

使用特权

评论回复
huangcunxiake| | 2019-4-12 21:13 | 显示全部楼层
没用过这样的方法。这个是什么类型应用,BSP里有没有相似的参考。

使用特权

评论回复
k_ryan|  楼主 | 2019-4-13 00:22 | 显示全部楼层
本帖最后由 k_ryan 于 2019-4-13 00:35 编辑

问题已经解决了,上面的代码是没问题的,其他同学可以参考

使用特权

评论回复
heisexingqisi| | 2019-4-14 21:11 | 显示全部楼层
多谢楼主分享,不过我都是按默认的,回头学习一下这些高级用法。

使用特权

评论回复
734774645| | 2019-4-15 10:21 | 显示全部楼层
学习学习。

使用特权

评论回复
huangcunxiake| | 2019-4-15 19:07 | 显示全部楼层
这个属于什么类型操作。

使用特权

评论回复
评论
k_ryan 2019-4-21 23:36 回复TA
其实也是很普通的应用而已,以前用其他品牌mcu也有类似的做法 
643757107| | 2019-4-15 23:42 | 显示全部楼层
解决了没,没用过这个,看看是不是有类似参考。

使用特权

评论回复
评论
k_ryan 2019-4-21 23:37 回复TA
已经解决了,我上面的做法是没问题的,只是配置上没处理好 
yiy| | 2019-4-16 23:24 | 显示全部楼层
这是IAP应用?

使用特权

评论回复
评论
k_ryan 2019-4-21 23:39 回复TA
算是吧, 将boot和app放到同一个flash 
稳稳の幸福| | 2019-4-16 23:47 | 显示全部楼层
这种可以实现两套程序调换?

使用特权

评论回复
评论
k_ryan 2019-4-21 23:40 回复TA
就是boot跳转到app而已 
fengxiaotian028| | 2019-8-12 14:45 | 显示全部楼层
k_ryan 发表于 2019-4-13 00:22
问题已经解决了,上面的代码是没问题的,其他同学可以参考

请问楼主是怎么解决的呢?我也正遇到类似问题,我用的芯片是NUC200,从boot跳到APP后,中断不能正常运行。而单独运行APP是可以进中断的。

使用特权

评论回复
SwPwr| | 2020-6-24 20:25 | 显示全部楼层
还没用过

使用特权

评论回复
jasontu| | 2020-7-6 13:53 | 显示全部楼层
在config中的boot in iap with APROM/LDROM要打开。

使用特权

评论回复
guiguihhh| | 2022-5-25 19:29 | 显示全部楼层
你好,请问最后是通过怎么配置解决的呢,我的代码大致一样,但是中断向量表还是跳不过去

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

39

帖子

2

粉丝