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:是否可以为异常(数据中止、预取中止和 UNDEF 进入)写入 C 处理程序

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1265037/tms570lc4357-is-it-possible-to-write-c-handler-for-the-exceptions-data-abort-prefetch-abort-and-undef-entry

器件型号:TMS570LC4357
主题中讨论的其他器件:HALCOGEN

大家好!

根据 halcogen 文件、我查看了 hl_sys_intvecs.asm

resetEntry b _c_int00
取消启用 b 取消启用
svcEntry b svcEntry
prefetchEntry b prefetchEntry
DataEntry b DataEntry
反向中断
LDR PC、[PC,#-0x1b0]
LDR PC、[PC,#-0x1b0]

当发生异常时、我可以开始在这里编写 c 处理程序来执行一些辅助控制任务吗? 这样做是否需要任何 TI #pragma、是否包含最少的汇编代码或没有汇编代码。

谢谢、我们期待听取 TI 专家和社区成员的意见。  

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

    尊敬的 Deric:

    如果需要、您可以自定义和编写自己的数据中止处理程序。 而不仅限于数据中止、即使对于任何中止也是如此。

    通常、如果发生数据中止、那么它将分支到相同的中止指令、如下方所示

    您可以在此处修改以分支到所需例程:

    如果发生异常、您可以只导入例程并分支到相应的例程。

    现在、在例程的定义中、您可以只编写所需操作:

    正如上面所说的、我只是对器件进行复位。

    我提供了一个示例项目供您进行测试

    在此示例中、我只切换两个 GPIO (在 Launchpad 中连接到 LED)、在切换10次后、我只会通过直接写入闪存而不是使用 FAPI 库来创建数据中止。

    这会产生数据异常、处理器将执行 USER_DataEntry_exception_handler 中的代码、处理器将复位并重复相同的过程。

    我在末端进行了测试、请将其作为参考。

    e2e.ti.com/.../Writing_5F00_C_5F00_Handler_5F00_For_5F00_Exception_5F00_LC4357.zip

    --

    谢谢。此致、
    Jagadish。

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

    您好,Jaga

    非常感谢、这是创建中止的快速方法。 代码运行良好、直到从处理程序返回。 我想返回主函数并继续闪烁、但当我注释掉异常处理程序中的行时。 使用调试器、它始终在那里循环。 我怀疑需要修改 LR 中的返回地址来补偿偏移。

    // systemREG1->SYSECR |=  (1 <<15); /*软件重置*/

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

    尊敬的 Deric:

    在这种情况下、您必须在处理程序中调用 main 函数。

    无需调用 main 函数如何再次执行 main 函数、因此只需在处理程序中再次调用 main 函数即可继续操作。

    --

    谢谢。此致、
    Jagadish。

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

    您好,Jaga

    我已经在 TI 编译器手册 spnu151W 中找到了答案、日期为 Mar2023、在第106页。 5.11.16 INTERRUPT Pragma。 使用此方法、我可以继续在 main 中执行。