ARM and interrupts

Toralf Lund toralf@procaptura.com
Thu Mar 18 12:34:00 GMT 2004


Bill Gatliff wrote:

> Toralf:
>
>
> Whether you need a kernel or not is a function of many things, 
> including the nature of your application, your tools, and your skills...

Yes. I'm pretty sure anything like Linux isn't called for in my case. 
I'd probably require only about 2% of the functionality, and I don't 
want to do the extra work that I assume is necessary to get the other 
98% to work, or to have those laying around to complicate matters. KISS...

>
> There isn't anything specific in Newlib related to ARM interrupts or 
> exceptions, except for the SWI stuff it uses to talk with Angel (if 
> you configure it that way). Everything else you provide on your own.

How about the stack pointer etc.? Do I have to set up that specifically 
for IRQ mode, too? Is the morale perhaps that I simply can't use the 
crt0 provided with newlib? (I was otherwise thinking that I might simply 
insert the vectors in front of it, if you now what I mean.)

>
> I do quite a bit of ARM vector work, it's an essential part of how my 
> debugging agents do their thing. Search for "gdbstubs" on Sourceforge 
> for some code examples. It isn't rocket science at all.
>
> I teach a class on GNU tools, called Embedded GNU Jumpstart. We use 
> ARM boards in that class, and yes, we write exception/interrupt 
> handlers and the corresponding vector code.
>
> See also the ARM Architecture Reference Manual, by David Seal. It 
> contains some brief examples too.

I'll have a closer look at what you mention here...

We also found some example code for a test board from Motorola (we're 
actually using a Motorola CPU with ARM core), and it turns out that they 
also have an "Interrupt Controler" application note that's quite helpful 
(unlike the CPU reference manual, I might add..)

>
>
>
> Regards,
>
>
> b.g.
>
>
> Thierry Moreau wrote:
>
>> Toralf Lund wrote:
>>
>>
>>
>>> I'm wondering about how to set up the interrupt vectors correctly on an
>>> ARM-9 setup w/o debug monitors. Has anyone else done this? Is there any
>>> kind of support for it in newlib? I mean, is the code that needs to be
>>> loaded at address 0 included anywhere? (That would not be the normal
>>> _start code, as far as I can tell.)
>>>
>>
>> Ah! When a developer says "my project is so small, no need for an 
>> O/S", he
>> removes everything from kernels (e.g. no inter-process messages), 
>> libraries
>> (e.g. no file i/o), and tools (e.g. no ) ... so far, so good.
>>
>> Then, remains a bare CPU, and an application software design, and
>> hardware-triggered events. A neat and simple execution environment. 
>> Yes, the
>> developer can do the processor initialization that ocsurs before the 
>> main()
>> instruction ... and the system flash programming tools (that were needed
>> anyway).
>>
>> The fun actually starts when the developer needs interrupt 
>> dispatching ... the
>> developer actually needs to re-invent (piecewise and painfully) what 
>> was removed
>>
>> in the first place. Among those pieces, there is some science that 
>> goes beyond
>> the mere technicalities of processor initialization and flash 
>> programming.
>>
>> I'm suggesting that you should consider kernels in the "deeply 
>> embedded" kernel
>> category (or "hard real-time", not because you need hard real-time 
>> but because
>> those kernels are perhaps features-lean). E.g. the ABCD 
>> Proto-Kernel(tm) (
>> http://www.connotech.com/abcd_proto_kernel/abcd_proto_kernel_intro.htm 
>> ), but it
>>
>> is defnitely not the only one.
>>
>> Cheers
>>
>> -- 
>>
>> - Thierry Moreau
>>
>> CONNOTECH Experts-conseils inc.
>> 9130 Place de Montgolfier
>> Montreal, Qc
>> H2M 2A1
>>
>> Tel.: (514)385-5691
>> Fax: (514)385-5900
>>
>> web site: http://www.connotech.com
>> e-mail: thierry.moreau@connotech.com
>> ====
>> 5. Basic ABCD Concepts
>>
>> 5.1 ‘A’ - Interrupt Dispatching
>>
>> A basic function of any operating system or kernel is to handle the
>> microprocessor interrupts. This is usually closely tied to the 
>> microprocessor
>> architecture. The ABCD Proto-Kernel™ provides a unified handling of 
>> interrupts
>> that logically dispatch the interrupt signals to the interrupt 
>> service routine
>> (ISR) that correspond to the exact source of the interrupt, as if the
>> microprocessor had a large number of independent interrupt vectors. 
>> In doing so,
>>
>> the ABCD Proto-Kernel™ prepares the ISR execution context (some 
>> limitations
>> apply to the software statements that make up the ISR). Lastly, the 
>> interrupt
>> handling includes ISR epilogue facilities that restore a normal 
>> software task
>> context once the ISR processing is complete.
>>
>> It is the application developers' responsibility to code the 
>> interrupt services
>> routines required by the application, to register them with the ABCD
>> Proto-Kernel™ interrupt dispatching, and to request the enabling of the
>> interrupt source associated with each ISR.
>>
>>
>>


------
Want more information?  See the CrossGCC FAQ, http://www.objsw.com/CrossGCC/
Want to unsubscribe? Send a note to crossgcc-unsubscribe@sources.redhat.com



More information about the crossgcc mailing list