EPICS Controls Argonne National Laboratory

Experimental Physics and
Industrial Control System

1994  1995  1996  1997  1998  1999  2000  2001  2002  2003  2004  2005  2006  2007  2008  2009  2010  2011  2012  2013  2014  2015  2016  2017  2018  2019  2020  2021  <20222023  2024  Index 1994  1995  1996  1997  1998  1999  2000  2001  2002  2003  2004  2005  2006  2007  2008  2009  2010  2011  2012  2013  2014  2015  2016  2017  2018  2019  2020  2021  <20222023  2024 
<== Date ==> <== Thread ==>

Subject: Re: Interrupt problem.
From: "Johnson, Andrew N. via Tech-talk" <tech-talk at aps.anl.gov>
To: Francisco Ramos <framoslandaeta at gmail.com>
Cc: EPICS tech-talk <tech-talk at aps.anl.gov>
Date: Tue, 25 Jan 2022 00:26:17 +0000
Hi Francisco,

On Jan 24, 2022, at 2:53 PM, Francisco Ramos via Tech-talk <tech-talk at aps.anl.gov> wrote:

I am writing to see if you can help or guide me to find a solution for the error I am having with the "Bancomm 365" driver. We are migrating the module to EPCIS version 7.0.6.1. with rtems5. The driver works correctly for version 3.14.12.8 and RTEMS 4.10. 

When I boot the driver I get the "spurious interrupt: 32" error.  This implies that the function (isr_bc635) associated with the interrupt is never called. In this case, the Bancomm card should issue an interrupt for each tick periodically. 

The error “spurious interrupt: 32” would imply to me that the CPU was seeing an interrupt on vector 32 but that it doesn’t have an interrupt service routine associated with that vector number. Does your macro BC635VEC expand out to 32? Has your bc635IntEnable() routine actually been run at the point when you are seeing the error message?

I assume you have already applied the patch to the epicsEvent API found in the GitHub PR #206 which is essential to be able to call epicsEventSignal() from an ISR on RTEMS-5.1. I just merged that PR into the 7.0 branch earlier today.

HTH,

- Andrew



Thank you very much in advance.


int bc635IntEnable (const epicsUInt16 signal, const char *parm )
{
         ……

        /* Connect bc635 interrupts */
        if( (status = devConnectInterruptVME(BC635VEC, isr_bc635, NULL) ) != OK )
        {
            errMessage(status, "BC635 error - unable to connect\n");
            return status;
        }
        pbc635->vector = BC635VEC;      /* Interrupt vector */
        pbc635->level = BC635LVL;       /* Interrupt level */

        /* Enable interrupts on this level */
        status = devEnableInterruptLevel( intVME, BC635LVL );
        if( status )
            printf("Enabling Bancomm interrupts failed\n");
        init = TRUE;
    }
    ……
}

void isr_bc635 (void *p)
{
   /* First check for periodic interrupt */
   if ( ((pbc635->intstat & 0x02) & pbc635->mask) != 0)
   {
    ……
   }

   /* let a high priority task deal with the other interrupts */
   epicsEventSignal(intSvc);
}

Regards,

-- 
Complexity comes for free, simplicity you have to work for.


Replies:
Re: Interrupt problem. Francisco Ramos via Tech-talk
References:
Interrupt problem. Francisco Ramos via Tech-talk

Navigate by Date:
Prev: RE: Adding a second output array to an areaDetector IOC Iain Marcuson via Tech-talk
Next: Re: Adding a second output array to an areaDetector IOC Mark Rivers via Tech-talk
Index: 1994  1995  1996  1997  1998  1999  2000  2001  2002  2003  2004  2005  2006  2007  2008  2009  2010  2011  2012  2013  2014  2015  2016  2017  2018  2019  2020  2021  <20222023  2024 
Navigate by Thread:
Prev: Interrupt problem. Francisco Ramos via Tech-talk
Next: Re: Interrupt problem. Francisco Ramos via Tech-talk
Index: 1994  1995  1996  1997  1998  1999  2000  2001  2002  2003  2004  2005  2006  2007  2008  2009  2010  2011  2012  2013  2014  2015  2016  2017  2018  2019  2020  2021  <20222023  2024 
ANJ, 14 Sep 2022 Valid HTML 4.01! · Home · News · About · Base · Modules · Extensions · Distributions · Download ·
· Search · EPICS V4 · IRMIS · Talk · Bugs · Documents · Links · Licensing ·