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.

F28027F,官方instaspin_foc里面lab05b中HAL_setupPie功能疑问



进行代码调试的时候,发现一个问题。官方instaspin_foc的lab05b中,初始化时,HAL_setupPie中的PIE_setDefaultIntVectorTable。VectorTable是从INT1开始初始化的。但是按我的理解,这里不是FlashCallbackVar吗?那FlashCallbackVar就指定了回调,而且回调的是PIE_illegalIsr,这样在进行Flash_API操作的时候不会有问题吗?能否帮忙解答一下。多谢。

  • PIE_setDefaultIntVectorTable表条目在启动时初始化为PIE_illegalIsr。因此,请确保为所有已启用的中断附加自己的处理程序。

    另外需要在调用FlashAPI例程之前禁用中断,或确保将ISR定位/加载到RAM中。
  • 查看一些C2000的例程,通常PIE VectorTable中的Reset、INT1和INT2是不会做初始化指向的,是从INT3开始指向。

    我今天做了一些测试。当我给INT1、INT2指向如下PIE_RESERVED之后(与instaspin_foc中的PIE_illegalIsr相同),进行Flash擦除会导致CPU reset。当我让INT1和INT2指向NULL之后,没有了回调,才能正常执行Flash擦除动作。所以我的问题是instaspin_foc里面初始化pie_vector_table的时候为什么给INT1、INT2指定到PIE_illegalIsr,会不会导致Flash擦除出问题。

  • 所以意思是这里做了INT1、INT2的初始化,并且指向了PIE_illegalIsr。后面真正使用Flash_API的回调的时候,需要重新指向自己的回调?否则就会跑到PIE_illegalIsr里面。那不是很麻烦,为什么干脆不做INT1、INT2的初始化,需要使用Flash_API回调的时候再由开发者自行添加,不需要回调的时候一直保持NULL就行了。这样只是进行Flash擦写也不会误回调到PIE_illegalIsr。
  • 在您给出的代码中的注释中是有说明的

        //
        // Do not write over first 3 32-bit locations (these locations are
        // initialized by Boot ROM with boot variables)
        //

  • 你们提供的例程里面是初始化了的。