-1

我正在开发一个基于飞思卡尔 MPC5534 控制器的开发项目。
对于某个要求,我需要在 ISR(已经存在)期间将两个特殊函数寄存器(即SRR0SRR1 )的值存储到可以从函数中访问的变量中。以下是现有 ISR 的汇编代码片段:

lis r0,0x_value1
ori r0,r0,0X_value2
mfSPEFSCR r3
and r0,r0,r3
mtSPEFSCR r0 
lis r3,Address@h
ori r3,r3,Address@l
mtlr r3
li r3,0x_value3
blrl
rfi

我打算如何以下列方式存储寄存器中的值:

lis r0,0x_value1
ori r0,r0,0X_value2
mfSPEFSCR r3// move from SPEFSCR register
and r0,r0,r3
mtSPEFSCR r0 //move to SPEFSCR register
lis r3,Address@h
ori r3,r3,Address@l
mtlr r3

mfsrr0 r4 //copy srr0 to r4
mfsrr1 r5 //copy srr1 to r5

li r3,FPU_RESET
blrl
rfi

困扰我的是,我怎么知道寄存器 r4 和 r5 是否已经被其他一些功能用完了(比如我无权访问其他项目文件)?如果是这样,我的方法对吗?我是否必须为此 ISR 推送和弹出 r4 和 r5 显式创建堆栈帧,以确保不会发生寄存器冲突?是否有意义?

现在我无法编译文件并查看。

任何使用过飞思卡尔或 powerPC 的人都可以帮助我。提前致谢。

4

1 回答 1

0

快速搜索告诉我,您需要在该系列的其他部分(555x、551x)中实现自己的堆栈帧。我没有明确找到 553x 的参考资料,但您应该可以找到。

这是我引用的应用笔记:AN2865

于 2016-08-08T13:41:50.780 回答