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