From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 32114 invoked by alias); 15 Feb 2009 18:13:42 -0000 Received: (qmail 32105 invoked by uid 22791); 15 Feb 2009 18:13:41 -0000 X-SWARE-Spam-Status: No, hits=-2.4 required=5.0 tests=AWL,BAYES_20,RCVD_IN_DNSWL_LOW X-Spam-Check-By: sourceware.org Received: from mailout2.zih.tu-dresden.de (HELO mailout2.zih.tu-dresden.de) (141.30.67.73) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Sun, 15 Feb 2009 18:13:29 +0000 Received: from rmc67-31.zih.tu-dresden.de ([141.30.67.31] helo=server-n) by mailout2.zih.tu-dresden.de with esmtp (Exim 4.63) (envelope-from ) id 1LYlUc-0007iZ-Hr for ecos-devel@ecos.sourceware.org; Sun, 15 Feb 2009 19:13:26 +0100 Received: from martin_pc.home (p5B0ED844.dip.t-dialin.net [91.14.216.68]) by server-n (Postfix) with ESMTP id 48678100A08E for ; Sun, 15 Feb 2009 19:13:26 +0100 (CET) Date: Sun, 15 Feb 2009 18:13:00 -0000 To: "ecos-devel@ecos.sourceware.org" Subject: How to handle very fast repeating interrupts? From: "Martin Laabs" Content-Type: text/plain; charset=iso-8859-1 MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Message-ID: User-Agent: Opera Mail/9.51 (Linux) X-IsSubscribed: yes Mailing-List: contact ecos-devel-help@ecos.sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Post: List-Help: , Sender: ecos-devel-owner@ecos.sourceware.org X-SW-Source: 2009-02/txt/msg00003.txt.bz2 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.