Yahoo Groups archive

Lpc2000

Index last updated: 2026-04-28 23:31 UTC

Message

LPC2148 and Fast I/O question

2005-12-31 by deliconn

Sorry if this question has been addressed before.  I searched through
the messages and didnt see anything.  I have decided that I dislike
the yahoo group design.

I just started using the LPC2148 for its fast I/O.  And so far I have
not been disappointed.  But I have really only been outputting at high
speeds.  My design now, requires the ARM to react to an outside event
and I only have ~850ns from the time my indication goes high to when
it goes low.  All my work needs to get done in that tiny space.  

So I hooked my external indication to an input pin.  I set up my
FIOMASK so only that pin is visible and I hand assembled the tightest
loop possible.  The C equivalent is:
  while(1) {
      if(FIOPIN) {
          FIOSET = my signal pin
          FIOCLR = my signal pin
      }
  }

What I found using a logic analyzer, sampling at 500MHz, is that the
time between my external indication going high and the time my signal
pin goes high is about ~230ns.  I am running my ARM at 58.9MHz (I will
be changing to 60MHz when parts get in).  I realize that a couple
clock cycles get wasted raising my signal pin and a couple may get
lost if I am in the 'while' jump, but why is it taking so long to
register the external input?  Does using the mask register carry any
overhead, seems silly if it did?

What is the fastest number of clocks the ARM can recognize that there
is input?

Oh, one more thing, I was initially going use an external interrupt
FIQ before I learned of my ~850ns window.  So the initial design has
the external indication coming in on P0.15.  I havent tried using a
different input pin yet.  I only mention it because there may be some
type of overhead when using a pin that could also be set as an
external interrupt.

Thanks for any help,

Vern

Attachments

Move to quarantaine

This moves the raw source file on disk only. The archive index is not changed automatically, so you still need to run a manual refresh afterward.