Yahoo Groups archive

Lpc2000

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

Message

Re: [lpc2000] fiq handler (iar:ERR vs gcc:OK)

2005-03-15 by k b shah (lascaux)

Are you sure you are setting up stack in the cstartup file ...???
Standard sample code come  with stack definition for IRQ but not for FIQ...
For IAR I can say that their tech. support is very good.
I got following answer from their tech. support which might help you.

First, create the following C function with your ADC code:

#pragma vector=0x1C
__fiq __arm void fiq_handler(void)
{
  ....
}

Second, add the ..\arm\src\lib\cstartup.s79 into your project
and add:

                bic     r0,r0,#MODE_BITS                    ; Clear the mode bits
                orr     r0,r0,#FIQ_MODE                     ; Set FIQ mode bits
                msr     cpsr_c,r0                           ; Change the mode
                ldr     sp,=SFE(FIQ_STACK) & 0xFFFFFFF8     ; End of IRQ_STACK

in between the following code:

                mrs     r0,cpsr                             ; Original PSR value
                bic     r0,r0,#MODE_BITS                    ; Clear the mode bits
                orr     r0,r0,#IRQ_MODE                     ; Set IRQ mode bits
                msr     cpsr_c,r0                           ; Change the mode
                ldr     sp,=SFE(IRQ_STACK) & 0xFFFFFFF8     ; End of IRQ_STACK
                
                bic     r0,r0,#MODE_BITS                    ; Clear the mode bits
                orr     r0,r0,#SYS_MODE                     ; Set System mode bits
                msr     cpsr_c,r0                           ; Change the mode
                ldr     sp,=SFE(CSTACK) & 0xFFFFFFF8        ; End of CSTACK

to initialize the fiq_sp.

Third, add the following segment definition in the xcl file
(specified in the workbench's menu "Project | Options | Linker |
Config | Linker command file | Override default):

-D_FIQ_STACK_SIZE=100
-Z(DATA)FIQ_STACK+_FIQ_STACK_SIZE=RAMSTART-RAMEND

kb shah
  ----- Original Message ----- 
  From: Pawel Sikora 
  To: lpc2000@yahoogroups.com 
  Sent: Tuesday, March 15, 2005 8:26 AM
  Subject: [lpc2000] fiq handler (iar:ERR vs gcc:OK)


  Hi all,

  I'm currently testing the new embedded workbench
  eval 4.20a. I have a software that perfectly works
  with gcc-3.4.x but doesn't work with IAR.
  I think the problem is in the IAR specific FIQ
  handling. I'm using mulitple IRQs and the
  only _one_ FIQ in my embedded system.

  The IRQ handler works fine with boths compilers.

  typedef void (*visr)();

  #ifdef __GNUC__
  __attribute__((interrupt("IRQ")))
  #else
  __irq __arm
  #endif
  void irq_handler(void)
  {
      ((visr)VICVectAddr)();
      VICVectAddr = 0;
  }

  The FIQ handler works only with GCC.

  #ifdef __GNUC__
  void __attribute__((interrupt("FIQ"))) fiq_handler()
  #else
  __fiq __arm void fiq_handler(void)
  #endif
  {
      // some action ...
  #ifdef __GNUC__
      T1_IR = 0xff;
  #else
      T1IR = 0xff;
  #endif
  }

  [ cite: philips lpc210x datasheet ]

  "The fastest possible FIQ latency is acieved when only
  one request is classifed as FIQ, because then the FIQ
  service routine can simply start dealing with that
  device. But if more than one request is assigned to
  the FIQ class, the FIQ service routine can read a
  word
  from the VIC that identifies which FIQ source(s)
  (are)
  requesting an interrupt"

  [ /cite ]

  Where is the problem?

  Regards,
  Pawel.


              
  __________________________________ 
  Do you Yahoo!? 
  Yahoo! Small Business - Try our new resources site!
  http://smallbusiness.yahoo.com/resources/ 

        Yahoo! Groups Sponsor 
              ADVERTISEMENT
             
       
       


------------------------------------------------------------------------------
  Yahoo! Groups Links

    a.. To visit your group on the web, go to:
    http://groups.yahoo.com/group/lpc2000/
      
    b.. To unsubscribe from this group, send an email to:
    lpc2000-unsubscribe@yahoogroups.com
      
    c.. Your use of Yahoo! Groups is subject to the Yahoo! Terms of Service. 



[Non-text portions of this message have been removed]

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.