查看: 6181|回复: 3

[已解决] kea128的bootloader中中断向量的问题

[复制链接]

该用户从未签到

1

主题

1

帖子

0

新手上路

Rank: 1

积分
39
最后登录
2020-4-22
发表于 2018-3-29 16:04:45 | 显示全部楼层 |阅读模式
在用KEA128开发,用到了booltloader,之前借助网上的资料已经写了一版bootloader程序和上位机软件,用的是CW10,里面APP跳转用的是下面的程序

        uint32_t *vectorTable = (uint32_t*)APPLICATION_BASE;   //APPLICATION_BASE通常是0x4000
        uint32_t sp = vectorTable[0];
        uint32_t pc = vectorTable[1];
        application_run(sp, pc);

application_run()函数如下:
void application_run(uint32_t sp, uint32_t pc)
{
    typedef void(*app_entry_t)(void);

    static uint32_t s_stackPointer = 0;
    static uint32_t s_applicationEntry = 0;
    static app_entry_t s_application = 0;
   
    s_stackPointer = sp;
    s_applicationEntry = pc;
    s_application = (app_entry_t)s_applicationEntry;

    // Change MSP and PSP
    __set_MSP(s_stackPointer);
    __set_PSP(s_stackPointer);

    // Jump to application
    s_application();

    // Should never reach here.
    __NOP();
}

以上这个程序测试过后是OK的,问题是我现在改用KEIL之后用这个程序就不行了,必须在跳转之前重置中断向量表,如下:

        SCB->VTOR = APPLICATION_BASE;   //重置中断向量表,APPLICATION_BASE通常是0x4000
        uint32_t *vectorTable = (uint32_t*)APPLICATION_BASE;
        uint32_t sp = vectorTable[0];
        uint32_t pc = vectorTable[1];
        application_run(sp, pc);

加了 SCB->VTOR = APPLICATION_BASE就可以了,我想问问大家,为什么CW10写的bootloader程序不写重置中断向量这句也能用呢?


最佳答案

你可以在CW中搜索一下SCB->VTOR,实现正常的跳转,请参考这两个应用手册里的代码。 http://www.nxp.com/docs/en/application-note/AN4767.pdf http://www.nxp.com/docs/en/appl ... ftware/AN4775SW.zip ...
回复

使用道具 举报

该用户从未签到

719

主题

6378

帖子

0

超级版主

Rank: 8Rank: 8

积分
25376
最后登录
2025-9-2
发表于 2018-3-30 10:10:04 | 显示全部楼层
你可以在CW中搜索一下SCB->VTOR,实现正常的跳转,请参考这两个应用手册里的代码。
http://www.nxp.com/docs/en/application-note/AN4767.pdf
http://www.nxp.com/docs/en/appl ... ftware/AN4775SW.zip
回复 支持 反对

使用道具 举报

  • TA的每日心情
    开心
    2019-5-27 09:45
  • 签到天数: 10 天

    连续签到: 1 天

    [LV.3]偶尔看看II

    5

    主题

    50

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    213
    最后登录
    2021-3-10
    发表于 2019-8-7 16:31:36 | 显示全部楼层
    万分感谢.我也是卡在这里了,终于解决了
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    3

    主题

    11

    帖子

    0

    新手上路

    Rank: 1

    积分
    42
    最后登录
    2024-11-14
    发表于 2022-12-25 15:15:51 | 显示全部楼层
    楼主您好,很高兴看到这篇文章,我正要开始做boolaot(IAR平台上,KEA128),目前是参照官网例子,也没看到您讲的跳转时,中断向量重置,有3点请教下:1、是不是也需要和您一样设置下?2、您的uint32_t sp = vectorTable[0];
            uint32_t pc = vectorTable[1];这里的值是什么,没懂请指教?3、APP工程里,除flash起始地址修改为,中断向量地址要偏移吗(有的有要,有的说不要,弄的不糊涂了)?  谢谢!
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2025-9-3 04:42 , Processed in 0.095446 second(s), 25 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

    快速回复 返回顶部 返回列表