interrupt example leon3

yaron o jaron0123 at gmail.com
Mon Oct 23 14:16:37 UTC 2017


Ok thank you ,

i succeeded to implement the interrupt on leon 3 ,thats what i added if
some one want to update the rtems-irq.c in sample file and add also:
...
...
#elif defined(LEON3)
    *(unsigned long *) (0x80000240) = 0xc; // for leon 3
    *(unsigned long *) (0x80000208) = 0xc; // for leon 3
#endif
...
...
in edition the printk instead of printf works for me either!


but still something missing for me and if some have an enswre it will be
great , the question is why 0xc ?
i cant find anything that relate to the 0x12 (rtems_vector_number in
the rtems_interrupt_catch ).

thanks again to all
Yaron


On Mon, Oct 23, 2017 at 12:29 PM, <Jan.Sommer at dlr.de> wrote:

> Hi Yaron,
>
> > -----Original Message-----
> > From: users [mailto:users-bounces at rtems.org] On Behalf Of yaron o
> > Sent: Monday, October 23, 2017 10:21 AM
> > To: users at rtems.org
> > Subject: interrupt example leon3
> >
> > Hello all
> >
> > I want to add a new interrupt in my program , i check the rtems sample
> folder in
> > order to see how to add one ,i found the rtems-irq.c file and i did as
> the file says
> > but im using a leon 3 and theirs it says: error Example not intended for
> LEON3
> > CPU.
> > my question's are:
> > firs how to call an interrupt in leon3 after i put it inside the ISR
> table, (i know that
> > in some OS you just write asm {INT #} in order to invoke the interrupt).
> >
>
> In rtems the low level interrupts are handled by the OS and forwarded to
> the function you
> registered with rtems_interrupt_catch.
>
> > second i need some explain for the lines :
> > *(unsigned long *) (0x80000090) = 0xc;
> >
> > *(unsigned long *) (0x80000098) = 0xc;
> >
>
> Checking the processor manual of the Leon2 these appear to be the
> registers of the interrupt controller (interrupt mask and interrupt force
> register).
> You might have to setup the interrupt controller of your Leon3 in a
> similar manner for the example to work.
>
> > in code below  because i don't quit understand it ( maybe it's invoke
> the interrupt
> > but how does it relate to the handleExternalIrq) .
> >
>
> As far as I see it first registers the function handleExternalIrq to the
> interrupts with id 0x12 and 0x13 using rtems_interrupt_catch.
> Then it enables those interrupts in the interrupt controller (write to
> 0x80000090).
> Finally it triggers the interrupts by writing to the interrupt force
> register (0x80000098).
> The interrupt should occur, being noticed by rtems and the
> handleExternalIrq-function should be called to handle the interrupt.
> I had some problems with calling printf from within ISRs. I would replace
> it with printk just to be sure.
>
> One hint regarding the Leon3: In the gr712rc user manual the interrupt
> numbers defined there are mapped in RTEMS to ids starting with 0x10 + irq#.
> Meaning e.g. the AHBSTAT interrupt (number #1) will have the id 0x11 in
> RTEMS and so on.
>
> Cheers,
>
>    Jan
>
> > i add the rtems-irq.c bellow"
> > ------------------------------------------------------------
> --------------
> > #include <rtems.h>
> > /* configuration information */
> >
> > #define CONFIGURE_INIT
> >
> > #include <bsp.h> /* for device driver prototypes */
> >
> > rtems_task Init (rtems_task_argument argument); rtems_isr
> handleExternalIrq
> > (rtems_vector_number vector);
> >
> > #define CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER
> > #define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
> >
> > #define CONFIGURE_MAXIMUM_TASKS             4
> >
> > #define CONFIGURE_RTEMS_INIT_TASKS_TABLE
> >
> > #define CONFIGURE_EXTRA_TASK_STACKS         (3 *
> > RTEMS_MINIMUM_STACK_SIZE)
> >
> > #include <rtems/confdefs.h>
> >
> > #include <stdlib.h>
> > #include <stdio.h>
> >
> > rtems_task
> > Init
> > (
> >     rtems_task_argument argument
> > )
> > {
> >     rtems_status_code status;
> >     rtems_isr_entry old_handle;
> >
> >     status = rtems_interrupt_catch (handleExternalIrq, 0x12,
> &old_handle);
> >     status = rtems_interrupt_catch (handleExternalIrq, 0x13,
> &old_handle);
> >
> > #ifdef __erc32__
> >     *(unsigned long *) (0x1f8004c) = 0x7ff0;
> >     *(unsigned long *) (0x1f800d0) = 0x80000;
> >     *(unsigned long *) (0x1f80054) = 0x0c;
> > #elif defined(LEON2)
> >     *(unsigned long *) (0x80000090) = 0xc;
> >     *(unsigned long *) (0x80000098) = 0xc;
> > #elif defined(LEON3) #error Example
> > not intended for LEON3 CPU #endif
> >     exit(0);
> > }
> >
> > rtems_isr
> > handleExternalIrq
> > (
> >     rtems_vector_number vector
> > )
> > {
> >     printf ("External interrupt received with vector 0x%x\n", vector); }
> >
> >
> > ----------------------------------------------------------------
> >
> > thanks a lot for the helpers !
> >
> > Yaron .
> >
> >
> >
> > --
> >  signature-
> > 1.gif<https://lh4.googleusercontent.com/MAmpk4C_PMWbT3zd0qdOSQrjc8Z10
> > rviGbNXOwcwHaQsEZMoMiIycSLYS_mSXnOqfEy2QkNLP1y-0gO-
> > 6yHBGUZLK1jtiiU6IpMMOJT-bAVizgbQcyOwKWpJ6DM5a1K9PnjXrkv8>
>
>


-- 




[image: website-17_1.png]



Yaron Oz

R&D Software developer

[image: LinkedIn.png]
<https://www.linkedin.com/profile/view?id=ADEAABf570IBz6vxnaUuFRd4vWcYkiAOQPP-fJc&authType=NAME_SEARCH&authToken=9WSX&locale=en_US&srchid=4022556821483907804041&srchindex=1&srchtotal=8&trk=vsrp_people_res_name&trkInfo=VSRPsearchId%3A4022556821483907804041%2CVSRPtargetId%3A402255682%2CVSRPcmpt%3Aprimary%2CVSRPnm%3Atrue%2CauthType%3ANAME_SEARCH>

Asher Space Research Institute

Technion – Institute of Technology

Technion City, Haifa 32000, Israel


[image: signature-1.gif]
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.rtems.org/pipermail/users/attachments/20171023/992568f5/attachment-0002.html>


More information about the users mailing list