Hello, I have take a piece of source at http://www.arm.com and tried to compile it using the CARM compiler. The code is shown below:
/* NewState=1 will enable IRQ, NewState=0 will disable IRQ */ /* ARM core must be in a privileged mode, e.g. supervisor */ void ChangeIRQ(unsigned int NewState) { int my_cpsr; __asm { MRS my_cpsr, CPSR /* get current program status */ ORR my_cpsr, my_cpsr,#0x80 /* set IRQ disable bit flag */ BIC my_cpsr, my_cpsr, NewState, LSL #7 /* reset IRQ bit with new value */ MSR CPSR_c, my_cpsr /* store updated program status */ } } void main(void) { __asm{MSR CPSR_c, #0x13} //Go into Supervisor Mode ChangeIRQ(0); while(1) { } }
ok, so where should I place the question if I just want to know how to disable global interrupts so I don't get disturbed by: timer, uart and external interrupts, while writing changes to an table and using the CARM compiler?
For this we have implemented __swi functions. Take a look to: http://www.keil.com/support/docs/2990.htm Reinhard
Thanks, so you mean that I can just use the __swi and write to my table inside this function and then I will not get interrupted by any IRQ!
YES