How to handle very fast repeating interrupts?

Martin Laabs martin.laabs@mailbox.tu-dresden.de
Sun Feb 15 18:13:00 GMT 2009


Hi,

i'm using a lpx2214 board which is running with 60MHz.
Now I have an interrupt every 12us (so 80k per second.)
The Interrupt handler is very short. It has to read one
word from the external memeory interface and store it into a
buffer. This has to happen until the next interrupt will occure
because otherwise data would be lost.
Because it has to do so little but so often I'd like to
avoid the whole interrupt management/routing eCos implements.
I'd like to configure this interrupt as a FIQ and just want
to jump to my ISR routine. What do I have to pay attention
on when doing so?
I'd write the routine in ASM and store the register I use
to the stack. (Which stack will I use. The one of the current
process?)


When disabeling the "Use seperate stacks for interrupt ..." I
get the following trap. Do you have any idea?


0x00002810 in ?? ()
Loading section .sram, size 0x54 lma 0x40000540
Loading section .rom_vectors, size 0x40 lma 0x81010000
Loading section .text, size 0x14948 lma 0x81010040
Loading section .rodata, size 0x4544 lma 0x81024988
Loading section .data, size 0x718 lma 0x81028ecc
Start address 0x81010040, load size 103992
Transfer rate: 62066 bits/sec, 370 bytes/write.
(gdb) cont
Continuing.
[New thread 2]

Program received signal SIGTRAP, Trace/breakpoint trap.
[Switching to thread 2]
0x810103d8 in IRQ_10T ()
(gdb) bt
#0  0x810103d8 in IRQ_10T ()
#1  0x81013faa in Cyg_Interrupt::acknowledge_interrupt (vector=2)
    at /opt/agade-software/ecos/ecos/packages/kernel/current/src/intr/intr.cxx:765
#2  0x8102b250 in cygmem_pool_heap1 ()
#3  0x8102b250 in cygmem_pool_heap1 ()
Previous frame identical to this frame (corrupt stack?)
(gdb) 

Thank you,
 Martin L.



More information about the Ecos-devel mailing list