Installing interrupt handlers on ARM7TDMI

Jay Monkman jtm at
Tue Jul 16 21:43:52 UTC 2002

On Tue, Jul 16, 2002 at 04:11:35PM -0500, Charles Steaderman wrote:
> I traced the implementation of _CPU_ISR_install_vector and it places 
> _ISR_Handler in memory at an offset of ARM_EXCEPTION_IRQ (0x18) + number 
> of interrupt sources (correctly 8 in this case) * 4 (0x20). This places 
> _ISR_Handler at 0x38 NOT 0x18. In addition, it places the address of 
> _ISR_Handler at 0x38, NOT a brach to _ISR_Handler instruction. I still 

It shouldn't put _ISR_Handler at 0x38, just the address of

The instructions  at 0x00 - 0x1c are 'ldr pc, [pc, #0x18]'. They get
setup in <bsp>/start/start.S.  That instruction means 'replace the PC
with the word at PC + 0x18'. So you don't need a branch - you just
need to store the address of _ISR_Handler at 0x38. 

It adds 0x18 to the PC instead of 0x20 because on the ARM the PC is 8
bytes past the current instruction.

> **something** working. I will look into a better way to dynamically get 
> a vector table into remapped ram at address 0x0 later (unless someone 
> else knows a neat way to do it :-)).

I think the vectoring need work.

> bsp, although it looks as though it is using an external PIC. In 
> addition, it performs a number of switches from INT mode to SVC mode and 
> back again which didn't seem to be very robust in my test case. I took 

I have a version that stays in INT mode the entire time (except when a
task switch is required). I'm sending the patch right after this.

> out the mode switches and things seemed to run better, but still no time 
> based task switches. Knowing now that the interrupt handling doesn't 
> properly save all states, perhaps that is more of the problem. It the 
> mode switching **really** necessary? Is it primarily for stack management?

I'm not sure why it was done that way. There's lots of way to do it,
and that probably seemed right at the time. As I understand it, most
(all) of the ARM stuff in the tree now is from a project that was
canceled, and it had to be put in the tree or thrown away. 

Jay Monkman	    The truth knocks on the door and you say "Go away, I'm 
                    looking for the truth," and so it goes away. Puzzling.
		     - from _Zen_and_the_Art_of_Motorcycle_Maintenance_

More information about the users mailing list