I want to insert inline assembly for following statements .I have used __asm directive but it gives error messege mrs r4, CPSR orr r4, r4, #0xC0 msr CPSR, r4 kindly advice
"it gives error messege" Precisely what message does it give? Cut-and-paste the entire message. You should just read the message literally - and think what it's telling you. Have you tried looking-up the message in the Manual? (in uVision, just click on the message, then press F1).
this is the code
__asm { MRS R0 ,CPSR AND R0,R0,#0XFFFFFF7F MSR CPSR,R0 }
As I said to you before, You should just read the message literally - and think what it's telling you. (I actually said it twice - but that was just an accident!) The messages say, "undefined identifier" and "Register name expected" - so it looks like it's not recognising CPSR and R0. Probably, you are missing an include file or something...? Why do you particularly want to do this as inline assembler?
You need to make sure that the inline assembly code within the function uses the correct mode: either ARM or Thumb, default is Thumb and that's why you get the errors since you are using ARM instructions. You can override the function mode with __arm or use #pragma ARM to change it. Take a look at the following example:
// #pragma ARM // would do the same as __arm below ! void ChangeIRQ (unsigned int NewState) __arm { // use ARM-mode for this function __asm { AND R0,R0,#0 // MRS R0,CPSR // ORR R0,R0,#0x80; // LDAV R1,R10,NewState // load parameter-value 'NewState' into R1 BIC R0,R0,R1,LSL #7 // MSR CPSR_c, R0 // } }