Yahoo Groups archive

Lpc2000

Index last updated: 2026-04-28 23:31 UTC

Message

IRQ / FIQ status register general question.

2006-01-27 by Dmitry Diky

Fellows,

In my application it is convenient to switch between IRQ and FIQ in some 
interrupt service routine.
As I know FIQ mode used banked r8-r14 registers and no registers have to be 
saved on stack (providing I want to have the things working :)

So, when an IRQ interrupt occurs, I immediately enter to FIQ, then process my 
interrupt request and then exit..

xxx_IRS:
	msr cpsr_c, #MODE_FIQ|FIQ_BIT|IRQ_BIT	; @ switch to FIQ with ints dsbld.
	... ISR code ...
	msr cpsr_c, #MODE_IRQ|FIQ_BIT|IRQ_BIT	; @ back to IRQ mode
	sub pc,lr,#4						; @ return from interrupt

Everything seems to be working except I am not sure what happens to CPSR of 
the user mode. As I understand, when nIRQ is asserted, CPSR being copied to 
SPSR_irq and on IRQ exit SPSR_irq -> CPSR_usr. But what happens when I switch 
to FIQ and back? Does the CPU core copy cpsr_irq to spsr_fiq and back 
or... ??? In a few words: will be user's CPSR kept alive with such IRQ 
servicing scheme?

Thanks,
Dmitry.

Attachments

Move to quarantaine

This moves the raw source file on disk only. The archive index is not changed automatically, so you still need to run a manual refresh afterward.