This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

TM4C123GXL中断向量问题

Other Parts Discussed in Thread: SW-TM4C, EK-TM4C123GXL, TM4C123GH6PM

我刚开始学习TIVA c,需要实现在一个主程序中通过中断向量捕获另一个用户区程序的main入口,然后将中断向量表交付给用户程序,如何实现?跪求具体实例代码说明,谢谢

  • ye,

       建议下载一个TI的关于TIVA的开发包,里面包含了很多入门的实例工程,下载链接如下:

      http://www.ti.com/tool/sw-tm4c?keyMatch=tivaware&tisearch=Search-EN

    另外,我们相配套的入门级的文档和PPT可以在下面的wiki网页上找到:

    http://processors.wiki.ti.com/index.php/Getting_Started_with_the_TIVA%E2%84%A2_C_Series_TM4C123G_LaunchPad

    希望可以帮到你了解我们的tiva

    谢谢

  • 但是没有中断向量截获样例啊!就是如何通过控制程序将程序入口交付给用户程序,简单来说就是如何实现main函数将其向量表交付给用户的main函。因为我想实现远程代码更新,所以驻留程序要将其执行入口和向量表交付给更新后的用户程序。求解答,最好有样例说明,现在一头雾水,谢谢

  • ye,

      看你的描述,怎么感觉是要做类似于bootloader之类的操作啊。你具体要实现的功能是什么呢?感觉不是很明白

    谢谢

  • 我需要完成一个项目~就是远程代码更新,主要思路是先编写个住留程序,烧入开发板~该程序通过串口通信,将另一个程序的二进制bin文件写入一个用户存储块,由于该用户程序是个完整的程序,有独立的主程序入口和中断向量表~所以需要通过住留程序(含main入口)将中断入口及程序入口权限交付给用户程序(也含有一个main),有点类似于bootloader。这样实现好像还需要中断向量表的重定位,作为一个初学者很迷茫……求指导~急需样例参考~ 谢谢~
  • 楼主,

        Tivaware里面boot_demo例程就是实现的楼主要的功能,建议楼主参考。另外,你的想法是对的,确实需要中断向量表的重定位,这是通过设置VTABLE寄存器来实现的。

        

  • 为什么我在官网下的TivaWare_C_Series-2.0.1.11577里没有boot_demo例程,下面附件里有图。

  • Ye hu

    如果你想使用串口进行升级的话,可以直接使用TI 的Bootloader。

    请下载最新的完整版的Tivaware。相关的例程在dk-TM4C123G文件夹下。包括boot_serial,boot_demo2,boot_demo1。 如果你是使用的EK-TM4C123GXL板子的话,请将例程中相关的LCD的操作去掉。

    该例程是基于Flash Based的bootloader。你可以按照以下操作进行实验:

    1. 下载boot serial到Flash(该部分在Flash中的起始地址为0x0000).

    2. 下载boot_demo1到Flash(该部分在Flash中的其实地址为0x2800)

    3. 使用LM_Flash programmer的UART模式,下载boot_demo2到芯片中(下载时,地址栏中请修改默认的0x0为0x2800)。

    4. 轮换下载boot_demo1和boot_demo2。

    该方式演示的便是你想要的通过串口远程下载。

    其中,

    1. boot serial即为你提到的“住留程序”,源代码在Tivaware的bootloader文件夹下。

    2.boot_demo1和boot_demo2即是你提到的“用户程序”。代码中下面的语句,便实现了中断向量标的重定位(Bootloader 的中断向量表)。

    //
    // Return control to the boot loader. This is a call to the SVC
    // handler in the boot loader.
    //
    (*((void (*)(void))(*(uint32_t *)0x2c)))();

    3. 用户程序存放的起始地址可以在boot_demox(1或2)_ccs.cmd中修改,

    #define APP_BASE 0x00002800

    修改此处的同时,应该修改Bootloader即驻留程序中相对应的用户程序地址,在bl_config.h中修改,

    #define APP_START_ADDRESS       0x2800

    需要注意的是,该地址之前的Flash空间一定不能小于驻留程序FW的大小。同时该值必须是1024字节的倍数。


    以上是针对Flash Based Bootloader的描述,如果你只需要使用串口进行升级的话,可以使用TIVA芯片ROM中的Bootloader。相对简单。同时能够节省Flash空间。

    具体的测试方法如下:

    1. 新建工程,将附件中的代码添加到工程下载到Flash中。

    2.使用LM_Flash programmer的UART模式,下载bin文件到芯片中。注意此处program选项卡中的的地址保持为默认0x0。

    该方式相对简单,固话在ROM中的Bootloader对应驻留程序,编译产生的为用户应用程序。代码中的ROM_UpdateUART();为向量表重定位,该函数在rom.h中定义。


    以上两种方式为Bootloader的演示,具体的请参考Bootloader users guide和Rom uses guide。这两份文档均可在Tivaware中的docs文件夹下找到对应你所使用的Tivaware版本的。

  • 我尝试了第一种方案~通过LM_Flash programmer下载bin文件时出现附件中的错误,波特率没改仍是115200啊?而且原boot_serial中没有main入口啊,怎么实现串口通信功能?以及用户程序入口定位问题?能否留个QQ什么的好请教一下,新手问题多多~谢谢

  • Ye hu

    LM_Flash programmer 的configuration选项卡中不要勾选 disable Auto Baud support.

    关于Bootloader的入口及执行流程,请参与Bootloader user guide 的startup Code章节。

  • 我没有勾选 disable auto baud support啊?只是简单改了下boot_demo的代码,见附件

    是不是板子型号问题,我的tm4c123gxl?

  • Ye hu

    看到你在代码中加入了LED 观察到的现象正确吗?

    参考下面这个帖子

    http://www.deyisupport.com/question_answer/microcontrollers/tiva_arm_cortex/f/96/p/61154/136313.aspx#136313

  • 通过ccs写入的亮灯效果无异常,但通过LM flash programmer的UART写入就会报错,win7系统问题么?对了芯片型号是tm4c123gh6pm,是这个问题么?

  • 通过什么函数可以截获用户程序入口(main)地址?还有什么函数可以使程序从该入口执行?

  • Ye hu

    1. Win7是没有问题的。请检查驱动是否装好。

    2.跟芯片没有关系。

    3. 能否提供以下你的LM Flash Program的配置。 configuration和program标签页

  • Ye hu

    不明白你的截获相应的入口地址是很么意思?没有类似的API函数。

    Bootloader在执行完升级或烧写完FW之后,会自动跳转到用户应用程序的起始地址,用户的应用程序的起始地址可以在bl_config.h中进行设置。

    另外,建议结合相关代码,阅读一下Bootloader users guide中的startup code章节。里面针对这一流程有很详细的描述。

  • Ye hu

    配置没有问题。做下面实验操作:

    1. 用JTAG模式看是否能够烧写。

    2.如果JTAG可以烧写,请将Flash完全擦出后断电重上电,然后尝试使用前面提到的UART进行烧写,看是否可行。

    (完全擦除Flash后上电,芯片会自动进入bootloader)