Michael is right--sleep and usleep specify a minimum time that will
be waited, not the exact amount. They're defined in the POSIX
specification that way because it would be impossible to schedule
applications fairly and obey everyone's timing requests.
To get the timing you want, you'll have to do a spin loop. To see
an example of this, look at the assembly ARM code inside the ts7250
LCD display example that's part of the Yahoo group Files. Yes, spin
loops will waste CPU, but for precise small timing needs you don't
have much choice.
Of course, you also need to realize that you won't be able to
maintain a 25KHz waveform forever; the kernel will schedule another
task eventually. The only way to prevent this is to either move the
logic into the FPGA (on the ts-7300) so it's not being generated by
software at all, or to disable interrupts.
--Andy Gryc
President, Airchitex
--- In "Michael Schmidt" <>
wrote:
>
> > Hi all,
> >
> > I have a 7250 board and am looking to generate a 25Khz square
wave on
> > a DIO pin.
> >
> > I am also running debian linux from a USB flash drive.
> >
> > I am able to generate a waveform (as seen on an oscilloscope) but
> > only at a maximum of 25Hz. I can not achieve a higher frequency.
Here
> > is a snippit of my C code:
> >
> > while (1){
> >
> > *PBDR = 0x01;
> > usleep(20);
> > *PBDR = 0x00;
> > usleep(20);
> > }
> >
> > The usleep() function SHOULD sleep for 20us. However, I can only
read
> > a 25Hz wave on the oscilloscope meaning that each pulse length is
> > 20ms.
>
> usleep(20) will sleep a <i>minimum</i> of 20us. What in fact is
happening
> is that your process is being rescheduled for the next clock tick,
which
> happens at 100Hz (10ms), times two is the 20ms period you are
seeing.
>
> Regards,
>
> Michael
>
Yahoo! Groups Links
<*> To visit your group on the web, go to:
http://groups.yahoo.com/group/ts-7000/
<*> Your email settings:
Individual Email | Traditional
<*> To change settings online go to:
http://groups.yahoo.com/group/ts-7000/join
(Yahoo! ID required)
<*> To change settings via email:
<*> To unsubscribe from this group, send an email to:
<*> Your use of Yahoo! Groups is subject to:
http://docs.yahoo.com/info/terms/
|