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.

关于MSP430F2131复位

Other Parts Discussed in Thread: MSP430F2131, MSP430F5437

我查阅MSP430F2131的用户手册发现,该芯片复位后,目标CPU会从0xFFFE执行,这是一个复位中断,那么我该如何从这个中断恢复,开始执行我自己的main程序呢?

  • 复位向量由C编译器使用函数c_int00()自动处理。该函数会处理各种事情,例如设置堆栈和堆,初始化全局变量和静态变量以及branch到main()。

    您可以看一下论坛上我之前的分享

    e2echina.ti.com/.../192689
  • 我其实更加关心的是:

    我想要通过MSP430F5437控制JTAG编程,向MSP430F2131里烧录程序,但是我烧完程序后需要让MSP430F2131运行一段时间。

    根据《Programming a Flash-Based MSP430 Using the JTAG Interface》里的描述,调用release释放从芯片后,2131会进入复位矢量。我想知道如何从复位矢量进入main函数运行?

  • 您的答案我没太看懂,是不是我不用在程序里额外处理,复位中断会自己跳转到Main?
  • 或许您可以看一下 

    6.9 System Initialization

    我这边没有2131的板子,所以我用G2553来说明一下

    在debug设置不自动跳到main

    然后debug就会跳到

    然后就会跳到boot.c中的

       /*------------------------------------------------------------------------*/
       /* Allow for any application-specific low level initialization prior to   */
       /* initializing the C/C++ environment (global variable initialization,    */
       /* constructers).  If _system_pre_init() returns 0, then bypass C/C++     */
       /* initialization.  NOTE: BYPASSING THE CALL TO THE C/C++ INITIALIZATION  */
       /* ROUTINE MAY RESULT IN PROGRAM FAILURE.                                 */
       /*------------------------------------------------------------------------*/
       if(_system_pre_init() != 0)
       {
          if (NEEDS_INIT)
             _auto_init();
       }
    
       /*------------------------------------------------------------------------*/
       /* Handle any argc/argv arguments if supported by an MSP430 loader.       */
       /*------------------------------------------------------------------------*/
       if (NEEDS_ARGS)
          _args_main();
       else
          main(0);
    
       exit(1);
    }

    在上面的语句中就会跳到main

  • 我使用的是IAR,从芯片是什么确实不重要。
    我是希望能从0xFFFE中断跳转到main的,为什么要在debug设置不自动跳到main呢?
  • IAR的话也是相同的流程

    “为什么要在debug设置不自动跳到main呢?”

    这个就是为了让您看清从reset跳到main函数这个过程经历了什么......不然直接设置自动跳到main,不就看不到这个过程了吗
  • 好吧,那就是如果产生复位矢量0xFFFE,那我就不用处理了?可以自动跳转到Main函数运行,而我不用写什么中断处理函数?
  • 是的,可以这样理解的