[coldfire-gnu-discuss] ColdFire Interrupts

Corrin Meyer Corrin.Meyer at dornerworks.com
Wed Jul 2 13:11:45 UTC 2008


>Corrin Meyer wrote:
>> According to the ColdFire datasheets, on entering of an ISR, the only

>> first instruction is guaranteed to run with interrupts disabled, and 
>> therefore should modify the status register.  Since on interrupt, the

>> processor creates an exception stack frame in which the status
register 
>> (SR) is stored, the first instruction in an ISR should load an
immediate 
>> value into SR.  Either that, or use the 'STRLDSR' instruction.
However, 
>> even with a function marked with "__attribute__((interrupt))" GCC 
>> doesn't seem to generate these instructions.  I also noticed that
none 
>> of the CS3 default interrupts do this.
>
>> Is this the intended functionality?  Am I correct in assuming that
the 
>> only way to write truly correct ISRs is to do so in assembly (or at 
>> least use assembly as a wrapper before calling C code)?
>
>The SR interrupt mask is automatically set to the level of the current 
>interrupt, so you only need the functionality you ask for when you want
to 
>disable all interrupts from the very start of the interrupt routine.
You >could 
>of course disable all interrupts later within the routine, but that
does >mean 
>there is a part of the routine that is preemptable (but not necessarily
>reentrant)
>
>I have filed an internal enhancement request.
>
>nathan

Thank you for filing an enhancement request.  My other question is in
regards to the "__attribute__((interrupt))".  Should I be using
"interrupt" or "interrupt_handler".  I saw that there had been some
discussion on which name to use, but I never found a resolution.

Corrin



More information about the coldfire-gnu-discuss mailing list