We are running a survey to help us improve the experience for all of our members. If you see the survey appear, please take the time to tell us about your experience if you can.
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
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 // } }