5532|3

9

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

要怎么设置TM4C129的中断向量表的偏移量呢? [复制链接]

我是用TM4C129做IAP升级,分为bootloader程序和app程序,flash空间前64KB(0x00000000~0x00010000)分配给bootloader程序,其余给APP程序(0x00010000~0x00100000)。
现在的情况是程序可以从bootloader程序跳转到app程序了,但是 跳转后执行一会儿就死机了(串口内容只打印了一半),目测是 APP程序的中断向量表没有设置好;因为当APP程序中有中断产生时,TM4C129的 PC 指针仍强制跳转到地址0X00000004 中断向量表处,而不是新程序的中断向量表(0x00010004),所以在APP程序开始处需要设置中断向量表的偏移量,在stm32中用  SCB->VTOR = FLASH_BASE | 0x10000; 来设置,不知道在TM4C129中要如何设置这个偏移量?
我用  HWREG(NVIC_VTABLE) = 0x10000;  这一句不行。谢谢。

最新回复

应该是为了能够更快地响应中断吧,这样做其实也很合理。  详情 回复 发表于 2017-2-21 10:14
 
点赞 关注

回复
举报

918

帖子

0

TA的资源

纯净的硅(中级)

沙发
 
我记得 TI M4 自己的 Demo 程序的 Bootloader 和 APP 都有各自的中断向量表表,跳转到 APP 之前,会将 APP 的中断表从 Flash 复制到 RAM 中,所以最好是看一下 Demo 程序是怎么实现的。然后再琢磨一下它为什么要这么处理。
 
 

回复

9

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
academic 发表于 2017-2-10 13:18
我记得 TI M4 自己的 Demo 程序的 Bootloader 和 APP 都有各自的中断向量表表,跳转到 APP 之前,会将 APP  ...

确实有把中断向量表复制到ram区,是在中断注册函数里,源码如下:
void
IntRegister(uint32_t ui32Interrupt, void (*pfnHandler)(void))
{
    uint32_t ui32Idx, ui32Value;

    //
    // Check the arguments.
    //
    ASSERT(ui32Interrupt < NUM_INTERRUPTS);

    //
    // Make sure that the RAM vector table is correctly aligned.
    //
    ASSERT(((uint32_t)g_pfnRAMVectors & 0x000003ff) == 0);

    //
    // See if the RAM vector table has been initialized.
    //
    if(HWREG(NVIC_VTABLE) != (uint32_t)g_pfnRAMVectors)
    {
        //
        // Copy the vector table from the beginning of FLASH to the RAM vector
        // table.
        //
        ui32Value = HWREG(NVIC_VTABLE);
        for(ui32Idx = 0; ui32Idx < NUM_INTERRUPTS; ui32Idx++)
        {
            g_pfnRAMVectors[ui32Idx] = (void (*)(void))HWREG((ui32Idx * 4) +
                                                             ui32Value);
        }

        //
        // Point the NVIC at the RAM vector table.
        //
        HWREG(NVIC_VTABLE) = (uint32_t)g_pfnRAMVectors;
    }

    //
    // Save the interrupt handler.
    //
    g_pfnRAMVectors[ui32Interrupt] = pfnHandler;

     

}


搞不懂他为什么要把中断向量表弄到ram区里,这样做有什么好处吗?

点评

应该是为了能够更快地响应中断吧,这样做其实也很合理。  详情 回复 发表于 2017-2-21 10:14
 
 
 

回复

918

帖子

0

TA的资源

纯净的硅(中级)

4
 
ypp240124016 发表于 2017-2-10 15:07
确实有把中断向量表复制到ram区,是在中断注册函数里,源码如下:
void
IntRegister(uint32_t ui32Inte ...

应该是为了能够更快地响应中断吧,这样做其实也很合理。
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条
ADI &文晔 探索季第一站,邀您在活动帖跟帖,ADI资深工程师将与您一道寻求解决之道! ...
春晚,最出圈当属穿着棉马甲跳秧歌的机器人”秧Bot”。
转手绢、飞手绢、变换队形,精准度和稳定性甚至超越人类,这背后少不了电机控制技术。

查看 »

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表