도와주세요!!
글 수 15,339
2002.03.25 20:09:32 (*.186.45.116)
12061
CPSR 은 스트롱암의 특별한 레지스터입니다.
인터럽트 인에이블과 모드(슈퍼모드,유저모드,등등)등이 있습니다.
메뉴얼을 참고하시고..
CPSR 을 엑세스 하기위해서는 mrs, msr 의 명령만을 사용합니다.
void cli(void)
{
asm volatile("stmfd sp!, {r0}"); // r0를 스택에 넣는다.
asm volatile("mrs r0, cpsr"); // CPSR을 읽어 r0에 넣는다.
asm volatile("orr r0, r0, #0x80"); // r0의 값중 D7 을 SET한다
asm volatile("msr cpsr, r0"); // CPSR에 r0을 넣는다.
asm volatile("ldmfd sp!, {r0}"); // 스택의 값을 r0에 넣는다.
}
void sti(void)
{
asm volatile("stmfd sp!, {r0}");
asm volatile("mrs r0, cpsr");
asm volatile("bic r0, r0, #0x80"); // r0 = r0 & (~0x80)
asm volatile("msr cpsr, r0");
asm volatile("ldmfd sp!, {r0}");
}
인터럽트 인에이블과 모드(슈퍼모드,유저모드,등등)등이 있습니다.
메뉴얼을 참고하시고..
CPSR 을 엑세스 하기위해서는 mrs, msr 의 명령만을 사용합니다.
void cli(void)
{
asm volatile("stmfd sp!, {r0}"); // r0를 스택에 넣는다.
asm volatile("mrs r0, cpsr"); // CPSR을 읽어 r0에 넣는다.
asm volatile("orr r0, r0, #0x80"); // r0의 값중 D7 을 SET한다
asm volatile("msr cpsr, r0"); // CPSR에 r0을 넣는다.
asm volatile("ldmfd sp!, {r0}"); // 스택의 값을 r0에 넣는다.
}
void sti(void)
{
asm volatile("stmfd sp!, {r0}");
asm volatile("mrs r0, cpsr");
asm volatile("bic r0, r0, #0x80"); // r0 = r0 & (~0x80)
asm volatile("msr cpsr, r0");
asm volatile("ldmfd sp!, {r0}");
}