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-Q1:如何从 C 或汇编语言访问 RPC 寄存器

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1275433/tms320f2808-q1-how-to-access-rpc-register-from-c-or-assembly

器件型号:TMS320F2808-Q1

微控制器有时会复位。 为了追根溯源、我想配置看门狗、使其进行中断、然后在唤醒中断内部读取返回程序计数器的值、将其写入 EEPROM、然后复位。 假设这是可行的,我最大的障碍是如何访问 RPC 寄存器,即将其值读取到 C 符号中。 有人能用组装说明执行此操作的过程吗?

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

    Peter、您好!

    参考 C28x 指令集、只能通过从栈推送/弹出 RPC 来访问它。 您可以将其推入堆栈、然后将其弹出到寄存器中以查看它、但这需要组装完成。

    请参阅该主题: https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/693819/ccs-tms320f280049-how-to-read-rpc

    此致、

    阿米尔·奥马尔

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

    遗憾的是、指示的线程没有帮助。 我需要知道调用唤醒 ISR 的函数、而不是调用汇编函数的函数。 我同意需要推动和弹出、但我不知道如何将 RPC 转换为 C 符号。

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

    遗憾的是、指示的线程没有帮助。 我需要知道调用唤醒 ISR 的函数、而不是调用汇编函数的函数。 我同意需要推动和弹出、但我不知道如何将 RPC 转换为 C 符号。 或许更具针对性的问题是: 如何将 ACC 移至 C 符号?

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

    Peter、您好!

    如何将 ACC 移至 C 符号?

    您可以参阅我的初始文章中链接的 C28x 指令集 I。 所有组装说明均在此处进行了描述。 如果您有符号的地址、那么您可以使用 MOVL 指令(如果您只保存 ACC 寄存器的低位字、则可以使用 MOV 指令):

    此致、

    阿米尔·奥马尔

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

    下面是一些可以正常工作的东西。 也许它会对其他人有所帮助。

    uint32  rpc = 0uL;

    interrupt  void  WatchDog_IntHandler(void) {
        asm(" ASP");
        asm(" PUSH DP");
        asm(" PUSH DP");
        asm(" PUSH RPC");
        asm(" POP  ACC");
        asm(" MOVW DP, #_rpc");
        asm(" MOVL @_rpc, ACC");
        asm(" POP DP");
        asm(" POP DP");
        asm(" NASP");