2016-08-08 8 views
-1

저는 프리 스케일 MPC5534 컨트롤러를 기반으로 개발 프로젝트를 진행하고 있습니다.
ISR (이미 있음) 중에 함수에서 액세스 할 수있는 변수에 두 개의 특수 함수 레지스터 (즉 SRR0SRR1)의 값을 저장해야합니다. 기존 ISR에 대한 어셈블리 코드는 다음과 같은 :특수 함수 레지스터에서 변수에 값 저장

나는 다음과 같은 방식으로 레지스터의 값을 저장하기 위해 계획입니다 방법
lis r0,0x_value1 
ori r0,r0,0X_value2 
mfSPEFSCR r3 
and r0,r0,r3 
mtSPEFSCR r0 
lis r3,[email protected] 
ori r3,r3,[email protected] 
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,[email protected] 
ori r3,r3,[email protected] 
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

, R4 및 R5는 인터럽트에 적재되지 않은에서 :

이것은 내가 언급 된 애플리케이션 노트입니다. 그렇다면 이전 값을 쌓기 전에 어떻게 사용합니까? 나는 그 문제가 PowerPC와 어떻게 관련되어 있는지 보지 못했다. 일반적으로 CPU에 상관없이 ISR 내부에서 임의의 CPU 레지스터에 쓸 수는 없습니다. – Lundin

+1

모든 어셈블러 코드를 사용해야하는 이유는 무엇입니까? 왜 C 또는 C++ 컴파일러가 프레이밍을 생성하고 내장 함수를 사용하게할까요? – Olaf

답변

0

빨리 검색하면이 패밀리의 다른 부분 (555x, 551x)에 자체 스택 프레임을 구현해야한다는 것을 알 수 있습니다. 553x에 대한 참조를 명시 적으로 찾지는 않았지만 찾을 수 있어야합니다. 내가 기억하는 것을 AN2865