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.
大家好!
根据 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 中执行。