我正在开发一个基于飞思卡尔 MPC5534 控制器的开发项目。
对于某个要求,我需要在 ISR(已经存在)期间将两个特殊函数寄存器(即SRR0和SRR1 )的值存储到可以从函数中访问的变量中。以下是现有 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 的人都可以帮助我。提前致谢。