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.

[参考译文] TMS320F2808:进入一个函数时的 TRAP 指令

Guru**** 2390755 points
Other Parts Discussed in Thread: TMS320F2808, C2000WARE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1035458/tms320f2808-trap-instruction-while-entering-a-function

器件型号:TMS320F2808
主题中讨论的其他器件: C2000WARE

我们有两个分区、用于 TMS320F2808控制器中运行的两个应用。

一个应用在扇区 A 和 B 中运行

第二个应用正在运行的是扇区 C 和 D

上电控制器进入第一个应用程序后、立即检查通用标志 b/w 应用程序1和2。然后跳转到第二个应用程序、第二个应用程序将执行正常的初始化步骤。

在第二个应用程序中、当我们输入任何函数时、我们将获得指向0x66的 PC 地址的陷阱指令。

下面是从应用一跳到应用二的指令。

void main (void)

   uint32 lastFgCounter = 0;

   //此处是检查通用标志 b/w 应用程序的代码


   asm (" lb 0x3EC000");//jump 指令到下一个应用
   //初始化系统控制:PLL、看门狗、外设模块的时钟
   InitSysCtrl();

  //初始化 GPIO
  InitGPIO();

  //初始化 PIE 控制寄存器
  InitPieCtrl();

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

    Sirnivas、

    您使用硬编码 ASM Longbranch to 2nd 应用程序是否有特殊原因?  如果您已强制.cmd 文件中的该地址始终保存该函数的 main()、我认为这将是静态的;但您应该只能调用该函数、或者如果您想使用 asm、则可以使用 LB 到_symbol 而不是立即数。

    无论如何、非法指令(通常由执行0x0000或0xFFFF 引起)都会强制立即调用非法 ISR、如果尚未初始化 PIE、则会映射到 M0空间。

    我建议创建非法 ISR (我们在 C2000Ware 的 defaultisr.c 文件中提供此信息)。  进入 ISR 后、您可以在栈上查找导致非法的指令的返回地址+1。

    在 CCS 中:View->Registers、然后展开内核寄存器并找到 SP (栈指针)。  无论 SP 中的值是多少、都可以打开存储器浏览器到该位置。  假设 SP 是 evan 地址、我上面提到的返回地址将位于 SP -2、LSB 为-2、MSB 为-1。  您可以在 MEMORY 窗口中查看此地址、如果那里有代码、该窗口将显示符号、您可以从那里进行调试。

    最棒的

    Matthew

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

    您好 MatthewRate、

     感谢您的支持、此问题可通过 codestartbranch.asm 文件从第二个应用程序的编译中排除、在包含此文件并对链接器命令文件进行了少量更改后得到解决。现在、从第一个应用程序跳转到第二个应用程序即可正常工作、不会出现任何问题。

    谢谢、

    Srinivas