我正在开发基于飞思卡尔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创建一个堆栈帧,以确保不会发生注册冲突?是否有意义?
现在我无法编译文件并查看。
任何使用过freescale或powerPC的人都可以帮助我。提前致谢。
答案 0 :(得分:0)
快速搜索告诉我,您需要在此系列的其他部分(555x,551x)中实现自己的堆栈帧。我没有明确找到553x的参考,但你应该能找到一个。
这是我引用的appnote:AN2865