[mc1322x] _rom_data_init_ branch

Mariano Alvira mar at devl.org
Thu Jul 16 11:39:24 EDT 2009


Giandomenico,

This is great! Thank you. Every piece of documentation helps.

I did also want to mention that both mc1322x-tests and contiki-mc1322x
use interrupts. Anyone working with interrupts may find the following
files useful:

  mc1322x-tests/src/isr.c
  mc1322x-tests/src/start.S
  mc1322x-tests/boot.lds

and 
 
  contiki-mc1322x/cpu/mc1322x/isr.c
  contiki-mc1322x/cpu/mc1322x/mc1322x.lds
  contiki-mc1322x/cpu/mc1322x/startup.S
  contiki-mc1322x/cpu/mc1322x/clock.c

-Mar.


On Thu, Jul 16, 2009 at 04:17:43PM +0300, Giandomenico Rossi wrote:
> > I can't say for sure exactly what rom_data_init does --- unfortunatly
> > only Freescale has the answer to that. 
> > 
> > The following:
> > 
> >    .org 0x120
> >    ROM_var_start: .word 0
> >    .org 0x7ff
> >    ROM_var_end:   .word 0
> > 
> > reserves space for the ROM services and I believe rom_data_init does
> > work in this area.
> I report, if it could be useful to someone,  some developments on my
> hacking rom_data_init call.
> 
> I have just notice that in rom_data_init call there are 2 entries at
> address 0x11788 and 11798 of the form :
> +-----------------------------------------------------+
> |   address1 |  address2  | size  | function adddress |
> +-----------------------------------------------------+
> |  0x40020c  |  0x40020c  | 0x520 |    0x10b2c        |
> +-----------------------------------------------------+
> |  0x400120  |  0x400120  | 0x97  |    0x10a9c        |
> +-----------------------------------------------------+
> The first routine to 0x10b2c set to 0  memory 
> from 0x40020c to 0x40020c+0x520 but I don't know what stand for.
> 
> The second entry point refers to address 0x400120 which is ROM_var_start
> as  Mariano said!
> 
> Well, I was writing code for CRM interrupt handler when I figured out
> that I didn't know where Interrupt handler table was located.
> Looking inside the file doc/ws-dis of mc1322x-tests it's easy to find in
> the exception vector table the address of irqHandler that is the routine
> where CPU jumps whenever a normal interrupt request is fired:
> 
>   400018:       eaf041fc        b       10810 <IrqHandler>
> 
> 
> IrqHadler is at address 0x10810.
> This is a routine coded in ARM instructions  so I had no problem
> disassembling it with FORTH DASM and discover that it does the
> following:
> 
> i)  read pending normal interrupt source from read-only register
> NIVECTOR
> 
> ii)  check if source is less than 11, the max number of interrupt
> sources 
> 
> iii) if it is the case load an address from 0x10838+8 in R1
> 
> iv) add 4*( interrupt source ) to R1 and jumps there.
> 
> The very funny thing is that looking for address in 0x10838+8 I've found
> 0x400120 which is ROM_var_start !!!! EUREKA!!!!
> ** First 11*4 bytes of ROM_var_start contain interrupt vector table. ** 
> 
> Rom Driver has 2 obscure functions for handler interrupts which are:
> 
> ITC_Init ()          @ 0xfe9d
> IntAssignHandler ()  @ 0xff25
> 
> The latter resets interrupt vector table and the former inserts an
> handler to interrupt table.
> Rom_data_init uses ITC_Init to fill interrupt vector table with the
> address of a dummy function located in rom at address 0x1001D .
> Call to  IntAssignHandler add handler function address to a
> corresponding  interrupt  vector table at ROM_var_start.
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> _______________________________________________
> mc1322x mailing list
> mc1322x at devl.org
> http://devl.org/cgi-bin/mailman/listinfo/mc1322x



More information about the mc1322x mailing list