This is the mail archive of the ecos-discuss@sourceware.org mailing list for the eCos project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: LPC2XXX watchdog feeds and interrupts


Hi Sergei,
Two things. It should not be an option as when the feed sequence is eventually interrupted and the processor is reset it can be VERY time consuming to track down. I know from bitter experience.
The other is I was not sure about which interrupt disable/enable function pairs to use. Is HAL_DISABLE_INTERRUPTS preferred over cyg_disable_interrupts?
We need ALL interrupts off during the feed.


        ...Laurie:{)
+61 416 114419


On 27/10/2009, at 7:40 AM, Sergei Gavrikov <sergei.gavrikov@gmail.com> wrote:


On Mon, Oct 26, 2009 at 08:58:19PM +1100, Laurie Gellatly wrote:
Hi All, I using an ARM 7 (LPC2212) based on an eCosCentric build. It
appears that watchdog feeds are done with interrupts enabled yet the
NXP manual warns against leaving interrupts enabled during a feed
sequence (and I'm pretty sure I've seen the consequences).  Firstly,
have I missed something? Are interrupts disabled and I just don't
see where when I call watchdog_reset() OR should I be adding
cyg_interrupt_disable() and cyg_interrupt_enable() calls around the
feed sequence in watchdog_lpc2xxx.cxx

Thanks ...Laurie:{)

Hello Laurie,


I found no any global interrupt disabling/enabling workaround for eCos
io/watchdog *::reset. More that the most targets as I could see have a
peace with CPU's watchdog with a single atomic write, but NXP and some
other targets claim two writes (!atomic operation): devs/watchdog/*

Well, NXP points on such a claim, for example, in this application
note
http://www.standardics.nxp.com/support/documents/microcontrollers/pdf/an10414.pdf
and in their other data sheets. Well, may be that is rare condition:
to break two sequenced  writes, but safety is safety :-) Could you
provide a patch for the issue, please`?

IMO, you would add some CDL in devs/watchdog/arm/lpc2xxx/*/*, e.g.
CYGOPT_DEVICES_WATCHDOG_ARM_LPC2XXX_RESET_SAFE to wrap that reset,
well, to add something likes the below

   int old;
   HAL_DISABLE_INTERRUPTS( old );
   /* Feed magic values to reset the watchdog. */
   /* ... */
   HAL_RESTORE_INTERRUPTS( old );

But, as I could understand, you pointed on eCosCentric build.

HTH

Sergei


-- Before posting, please read the FAQ: http://ecos.sourceware.org/fom/ecos and search the list archive: http://ecos.sourceware.org/ml/ecos-discuss


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]