ts-7000
[Top] [All Lists]

Re: [ts-7000] Re: Generating a 25Khz wave on DIO pins

To:
Subject: Re: [ts-7000] Re: Generating a 25Khz wave on DIO pins
From:
Date: Thu, 2 Nov 2006 16:31:26 -0600

Just in case anyone thinks the rtai extension might help...
I've benchmarked P4s at a 20 usec period... it actually did work although linux was fairly unresponsive.

But I've found the "practical" interrupt limit on a TS7250 board running rtai to be about 250 usec.  This is the "out-of-the-box" rtai that TS provides -- there might be ways to hack something more.  Still very good, mind you, but nothing close to 25kHz.



"andygryc" <>
Sent by:

11/02/2006 03:53 PM
Please respond to ts-7000

       
        To:        
        cc:        
        Subject:        [ts-7000] Re: Generating a 25Khz wave on DIO pins



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/



__._,_.___


SPONSORED LINKS
Single board computer Hardware Computer running slow
Linux os Single board

Your email settings: Individual Email|Traditional
Change settings via the Web (Yahoo! ID required)
Change settings via email: =Email Delivery: Digest | m("yahoogroups.com?subject","ts-7000-fullfeatured");=Change Delivery Format: Fully Featured">Switch to Fully Featured
Visit Your Group | Yahoo! Groups Terms of Use | =Unsubscribe

__,_._,___
<Prev in Thread] Current Thread [Next in Thread>
Admin

Disclaimer: Neither Andrew Taylor nor the University of NSW School of Computer and Engineering take any responsibility for the contents of this archive. It is purely a compilation of material sent by many people to the birding-aus mailing list. It has not been checked for accuracy nor its content verified in any way. If you wish to get material removed from the archive or have other queries about the archive e-mail Andrew Taylor at this address: andrewt@cse.unsw.EDU.AU