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.
Dear People who migrate from legacy Keil Tools to ARM RealView:
I am interested to use the Nested Interrupt in Software in a simple way shown in Examples. But in RealView I am not able to use Inline Assembly with Access to some Registers:
Macros for GCC and legacy Keil Tools:
// Macros for Interrupt Nesting #define IENABLE __asm { MRS LR, SPSR } __asm { STMFD SP!, {LR} } __asm { MSR CPSR_c, #0x1F } __asm { STMFD SP!, {LR} }
#define IDISABLE __asm { LDMFD SP!, {LR} } __asm { MSR CPSR_c, #0x92 } __asm { LDMFD SP!, {LR} } __asm { MSR SPSR_cxsf, LR }
In current RealView Tools it is not possible to access the Registers SP, LR, PSR via Inline Assembly with Assembler Macros. Instead of the Macros, I developed the following Assembler Functions for Embedded Assembler:
nested_irq_enable: STMFD SP!, {R0} MOV R0, LR MRS LR, SPSR STMFD SP!, {LR} MSR CPSR_c, #0x1F STMFD SP!, {LR} BX R0
nested_irq_disable: MOV R0, LR LDMFD SP!, {LR} MSR CPSR_c, #0x92 LDMFD SP!, {LR} MSR SPSR_cxsf, LR MOV LR, R0 LDMFD SP!, {R0} BX LR
The Runtime of these Instructions is a little bit longer as the Macros. Also, the Stack is affected by a Register Saving of R0.
I have tested a simple configuration, a Timer Interrupt is breaking an external Interrupt, it works very well.
Should I be concerned on it?
Is there anybody who has an Idea to make this better?
Greetings
Dietmar Wengler