Yahoo Groups archive

Lpc2000

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

Message

Re: D/A noise

2006-01-20 by Magnus Lundin

Brendan,

I'm not shure. This should look as follows in pseudo assembler after
the timer counter and the D/A adresses are loaded into processor
registers:
  one load from an on chip register (the counter)
  one compare to a fixed short (byte) value
  one conditional branch two instructions backwards
  [branch not taken]
  write to D/A
If the loop always runs at least once the the flash preload state
should be fixed as the instruction timings. Since there is no 
other cache or dynamic memory handling on the lpc2xxx chips
this can work if there are no interupts disturbing the instruction
flow. Of course this must be tested.
  
Magnus

--- In lpc2000@yahoogroups.com, "brendanmurphy37"
<brendan.murphy@i...> wrote:
>
> 
> Magnus,
> 
> This will certainly give an improvement, but even the shortest 
> possible loop will have a built-in jitter that cannot be removed, 
> particularly if you take into account the additional cycles needed to 
> access the timer peripheral.
> 
> Unfortunately, I don't have figures for this, as they've long since 
> been discarded (we analysed the o/p signal for noise in various 
> frequency bands), but from memory even a couple of clock cycles 
> jitter had a significant effect.
> 
> Of course, a lot depends on what your trying to achieve: just reduce 
> some annoying hiss in a self-build project it might be fine.
> 
> Brendan
> 
> -- In lpc2000@yahoogroups.com, "Magnus Lundin" <lundin@m...> wrote:
> >
> > Hi
> > 
> > Another way to remove jitter is to read the timer in the interrupt 
> > routine and loop on this until a predefined value, the number of 
> > clock ticks when there is maximal latency at this point in the
> > interrupt routine, has passed since the timer rollover.  
> > This can be done just before outputing the samples or at the 
> beginning.
> > 
> > This uses the interrupt to place the clock at almost the right time
> > and the a wait loop on the timer counter for precise adjustment.
> > 
> > Magnus
> > 
> > --- In lpc2000@yahoogroups.com, "brendanmurphy37"
> > <brendan.murphy@i...> wrote:
> > > To get rid of jitter, you should code your o/p interrupt so that 
> the 
> > > code from the start of the interrupt through to where the sample 
> is 
> > > o/p has no "if" statements or similar (i.e. it must execute the 
> same 
> > > number of instructions for each interrupt). You then have to try 
> and 
> > > ensure that the program being interrupted is always on an 
> instruction 
> > > that takes the same number of cycles to execute. One way of doing 
> > > this is to set up a timer interrupt to happen just before the o/p 
> > > time. We use this approach, and jump to a (lot of "nops"). 
> Karrl's 
> > > suggestion (go to idle mode) is probably better than this, as it 
> > > saves code space). The "real" interrupt can then be used to knock 
> you 
> > > out of this to o/p the sample. This will not remove jitter 
> entireley, 
> > > but it makes a significant difference.
> > >
> >
>

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.