Thanks for the quick response.  I will definitely look into it

On Thursday, May 22, 2014 5:35:26 PM UTC-7, john3909 wrote:
>
>
> From: <[email protected] <javascript:>>
> Reply-To: <[email protected] <javascript:>>
> Date: Thursday, May 22, 2014 at 4:53 PM
> To: <[email protected] <javascript:>>
> Cc: <[email protected] <javascript:>>
> Subject: [beagleboard] Beaglebone Black: Reading GPIO at High Frequencies
>
>
> I would like to continuously read the status of an IO line on my 
> Beaglebone black.  The code I pasted below is a section of my software 
> looking for rising and falling edges.  Is there a way in Linux to read the 
> status of that line without having to open and close the same file that is 
> faster?  The method I have below works, but only at really low frequencies. 
>
> I am trying to read the IO approx. 15kHz.
>
> Doing this from user space using the SYS filesystem is going to be slow. 
> You have two options in Linux:
>
>    1. Use mmap and read/write directly the GPIO registers
>    2. Use a kernel module or device driver to read/write the GPIO 
>    registers
>
> However, even at 15KHz, the Linux kernel will be too slow because of 
> scheduling and interrupt latency. I suggest you try to do the high speed 
> stuff with the PRU and then interface with Linux for the high level data 
> manipulations.
>
> Regards,
> John 
>
>
> Thanks
>
>
>       while( buf[0]=='0' ) {
> memset(adc_drdy, 0, sizeof(adc_drdy) );
> if((j =  fopen ( "/sys/class/gpio/gpio65/value", "r"   )) ==  NULL)  {
> //printSerial("Unable to read input file");
> }
> else {
> fgets(adc_drdy, sizeof(adc_drdy), j);
> strcpy(buf, adc_drdy);
> //fprintf(j, "%s", adc_drdy);
> fclose(j);
> }
> system("echo 0 > /sys/class/gpio/gpio61/value");
> printf("%c\n", buf[0]);
> //if(ADC_DRDY=='1') break;
> }
>  while( buf[0]=='1' ) {
>
> memset(adc_drdy, 0, sizeof(adc_drdy) );
> if((j =  fopen ( "/sys/class/gpio/gpio65/value", "r"   )) ==  NULL)  {
> //printSerial("Unable to read input file");
> }
> else {
> fgets(adc_drdy, sizeof(adc_drdy), j);
> strcpy(buf, adc_drdy);
> //fprintf(j, "%s", adc_drdy);
> fclose(j);
> }
> system("echo 1 > /sys/class/gpio/gpio61/value");
> printf("%c\n", buf[0]);
> //if(ADC_DRDY=='0') break;
> }
>
> -- 
> For more options, visit http://beagleboard.org/discuss
> --- 
> You received this message because you are subscribed to the Google Groups 
> "BeagleBoard" group.
> To unsubscribe from this group and stop receiving emails from it, send an 
> email to [email protected] <javascript:>.
> For more options, visit https://groups.google.com/d/optout.
>
>

-- 
For more options, visit http://beagleboard.org/discuss
--- 
You received this message because you are subscribed to the Google Groups 
"BeagleBoard" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to