Cortex-A9 CPSR I Flag unmask problem

  • Note: This was originally posted on 18th July 2012 at http://forums.arm.com

    Thanks for the adwise but the way i try to unmask the I flag should be correct.
    If i use CPSID I to unmask the flag, same scenario: abort mode and I flag still set.

    Something blocks access to the I flag and i dont know (yet) what does.
  • Note: This was originally posted on 19th July 2012 at http://forums.arm.com

    Human Error! I didnt read carefully and thought flag = 1 = interrupt enabled.

    This is exactly what happened:
    Quote by ttfn:
    Best guess... the "CPSIE i" succeeds and an IRQ is immediately taken.   The IRQ handler triggers an Abort - hence ending up in abort mode.


    Thanks alot!
  • Note: This was originally posted on 17th July 2012 at http://forums.arm.com

    You might want to look at why you ended up in Abort mode.  Attempting to change the CPSR will not directly trigger an abort.  So a couple of likely possibilities are that you're writing the wrong bit pattern, or that after IRQs there is an abort (in the irq handler for instance).
  • Note: This was originally posted on 18th July 2012 at http://forums.arm.com

    Just sanity checking....  "CPSID i" will set the CPSR.I bit which disables (not enables) interrupts.  Is that what you meant?

    Have you checked what address is in the LR_abt and pattern in SPSR_abt?  If it is a data abort you probably also want to check the CP15 DFSR and DFAR.

    Best guess... the "CPSIE i" succeeds and an IRQ is immediately taken.  The IRQ handler triggers an Abort - hence ending up in abort mode. 

    NOTE: Taking any exception will cause the CPSR.I bit to be set.  So if an abort or IRQ is being taken, it would be expected that the CPSR.I bit gets set again.
  • Note: This was originally posted on 17th July 2012 at http://forums.arm.com

    CPSIE i
More questions in this forum