The problem with skyeye and csb337

xi yang hiyangxi at gmail.com
Fri Jun 15 20:00:29 UTC 2007


>joel
> Are you running hello or ticker?
I am running ricker.
>The code in
> c/src/lib/libcpu/arm/at91rm9200/clock has this routine
>
> static void clock_isr_on(const rtems_irq_connect_data *unused)
> {
>    /* enable timer interrupt */
>    ST_REG(ST_IER) = ST_SR_PITS;
> }
>
> which should be invoked when the interrupt is connected
> via a call to BSP_install_rtems_irq_handler in the irq directory
> one level up.
The problem is BSP_install_rtems_irq_handler with clock handler has not been
invoked.
>
> >       2ed.It seems that after disabled all the interrupt sources and
> > install the
> >             default_int_handler() at all 32 interrupt source vector
> > registers,rtems
> >             has not enabled the SYS interrupt source(number 1) of AIC
> > and also  has
> >             not installed the CLOCK interrupt handler(I guss rtems
> > use  interrupt
> >             managers to manage the interrupt of 32 lines.Because
> > there are more
> >             than one devices use the same line,for example,system
> > clock and DBGU
> >             use the same SYS interrupt source),but i can not find
> > where is the SYS
> >             interrupt source manger,who can tell me?
> The code for interrupt management on this CPU should be
> in c/src/lib/libcpu/arm/at91m9200/irq.  I don't see any
> that is board specific reference in csb337/Makefile.am
> >             Since the interrupt of SYS is disable ,there is not any
> > clock interupt can be
> >             delivered to CPU ,without the clock interrupt,the system
> > is hang in idl
> >             task.
> >             So i enable the interrupt of clock and SYS interrupt
> > source of AIC.Since
> >             default_int_handler() is still in all 32 interrupt source
> > vector registers ,at
> >             every clock interrupt ,the system traps into
> > default_int_handler();
> >              So,there are
> >            " raw_idt_notify has been called
> >             1
> >              raw_idt_notify has been called
> >              2
> >              ..." on my screen.
> >      Q1,Where is the code installs SYS interrupt handler?
> >      Q2,Where is the code enables the interrupt of clock device and AIC?
>
> c/src/lib/libcpu/arm/at91rm9200/irq - look for BSP_install_rtems_irq_handler
> and look what it does when the interrupt is dynamically installed:
>
>   /*
>     * store the new handler
>     */
>    AIC_SVR_REG(irq->name * 4) = (uint32_t) irq->hdl;
>
>    /*
>     * unmask interrupt
>     */
>    AIC_CTL_REG(AIC_IECR) = 1 << irq->name;
>
>    /*
>     * Enable interrupt on device
>     */
>    if(irq->on) {
>        irq->on(irq);
>    }
Yeah,i know this,and problem is that rtems has not executed
BSP_install_rtems_irq_handler  for clock,i mean the clock interrupt
handler is not
installed.
I think i can resolve it when i am more familar with code of rtems.The key
is to detect why BSP_install_rtems_irq_handler has not been invoked.
> i think that's all the code you are looking for.  irq->on() goes back to the
> Clock driver "on" callback which I cut and pasted above.
>
>
> >      I think code of Q1 contains code of Q2,and some unkonw reasons
> > result in
> >         system has not executed the code of Q1.
> I don't know if I helped or not.  Even though I maintain RTEMS, I
> am not an expert on every CPU it supports.  I have to struggle
> through the manuals with the rest of you. :)
Thank you very much.
I will resolve it as soon as possible.
regards.
>
> --joel
>



More information about the users mailing list