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.

[参考译文] TMS570LC4357:如何使用引导加载程序处理应用程序中断

Guru**** 2463330 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/638874/tms570lc4357-how-to-handle-application-interrupt-with-a-bootloader

器件型号:TMS570LC4357

大家好、

我们正在使用以太网通信开发引导加载程序。 到目前为止、我们成功地对应用进行了擦除、编程和跳转到。

问题是:在应用程序执行期间、只执行后台函数、而定时器中断中的后台函数不执行。  

引导加载程序驻留在从0x0000到0x7FFF 的闪存中。 应用程序位于0x8000。

我们将应用程序矢量表重新映射到0x8000、并尝试按照此链接中的说明进行操作:

现在、在引导加载程序项目中、我们有:

resetEntry
b _c_int00
undefEntry
b #0x7FF8;undefEntry
svcEntry
b #0x7FF8;svcEntry
预取编码
b #0x7FF8;prefetchEntry
DataEntry
b #0x7FF8;DataEntry
b #0x7FF8;相位中断
LDR PC、[PC、#-0x1b0]
LDR PC、[PC、#-0x1b0] 

此外、我们还通过 VIC 控制器启用了 IRQ 处理。

仍然没有变化。

有什么建议吗?

谢谢

Valentina

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Valentina、

    复位后、ARM CPSR 寄存器中的 IRQ 和 FIQ 位被置位、并且 FIQ 和 IRQ 中断被禁用。 请调用"_enable_IRQ_interrupt_();"来启用 IRQ 中断。

    您还需要启用 RTI 比较中断通知。 例如:
    rtiEnableNotification (rtiREG1、rtiNOTIFICATION_COMPARE0);
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    王先生、您好!

    感谢您的关注。

    我的应用程序代码中确实有"_enable_IRQ_interrupt ()"并且 RTI 中断通知被启用。 事实上、在没有引导加载程序的情况下运行应用程序代码、计时器中断可用作其他中断。

    我想我在使用引导加载程序重映射中断矢量表中缺少了一些内容。

    谢谢

    此致

    Valentina

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Valentina、

    您是否更改了 cmd 文件以将向量分配到0x8000?

    引导程序(X):origin=0x00008000 length=0x00000020
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    要在应用程序中使用中断、应按如下方式修改引导加载程序的中断矢量表和应用程序的 cmd 文件:

    应用程序的 cmd 文件

      引导程序  (X) :origin=0x0000xxxx (应用 程序起始地址) length=0x00000020

    引导加载程序中的中断矢量表

    b _c_int00;0x00
    B #0xxxxx (应用程序起始地址- 0x08)  
    b #0xxxxx (应用程序起始地址- 0x08);软件中断
    b #0xxxxx (应用程序起始地址- 0x08);中止(预取)
    b #0xxxxx (应用程序起始地址- 0x08);中止(数据)
    保留尝试
    b 保留尝试
    LDR PC、[PC、#-0x1b0];0x18
    LDR PC、[PC、#-0x1b0];0x1C

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Valentina、

    请注意代码“switch (getResetSource ()....” hL_sys_startup.c 文件中。

    当代码从引导加载程序跳转到应用程序时、在引导加载程序中清除复位源、不会执行中断矢量初始化和其他函数、因此无法进入应用程序中断。

    如果未修改此位置,则会遇到此问题。