微控制器有时会复位。 为了追根溯源、我想配置看门狗、使其进行中断、然后在唤醒中断内部读取返回程序计数器的值、将其写入 EEPROM、然后复位。 假设这是可行的,我最大的障碍是如何访问 RPC 寄存器,即将其值读取到 C 符号中。 有人能用组装说明执行此操作的过程吗?
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.
微控制器有时会复位。 为了追根溯源、我想配置看门狗、使其进行中断、然后在唤醒中断内部读取返回程序计数器的值、将其写入 EEPROM、然后复位。 假设这是可行的,我最大的障碍是如何访问 RPC 寄存器,即将其值读取到 C 符号中。 有人能用组装说明执行此操作的过程吗?
Peter、您好!
参考 C28x 指令集、只能通过从栈推送/弹出 RPC 来访问它。 您可以将其推入堆栈、然后将其弹出到寄存器中以查看它、但这需要组装完成。
此致、
阿米尔·奥马尔
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");