Hi Jack, Thanks for the help!. I looked at your library and it appears that you are using poll(2) as well which is similar to the example I am trying to use in the original post.
There are two things I want to mention 1. Latency : I came across somewhere that poll() by itself introduces 150ms latency which is not good for the system I am building. (But I want it to work first) And you have mentioned that the library is optimized for reliability rather than speed. 2. Complexity : Interrupt capture is just a small part of the system I am building and I want the code to be as simple and little as possible. This Code <https://developer.ridgerun.com/wiki/index.php/Gpio-int-test.c> appears to be simple enough and does just the functionality. Since you have built the library, Can you please just point out where in the code I might be going wrong? The problem might be trivial but I am missing something. I am using POLLIN and it continuously outputs GPIO 117 interrupt occurred even though I have not connected any signals to GPIO 117. More details/analysis done in the original post. Thank you! sudhir. On Friday, 18 October 2013 13:25:09 UTC-4, Jack Mitchell wrote: > > Sudhir, > > If you don't object to using a library there is libsoc[1] which is made > for this exact purpose. > > https://github.com/jackmitch/libsoc > > Cheers, > Jack. > > On 18/10/2013 17:31, sudhir v wrote: > > > > Hi, > > > > I want to monitor a pin on BBB for interrupt. I chose pin 117 (pin 25 on > > P9 -> GPIO3_21 = 32*3+21 = 117. I hope that's correct?) > > I came across this question on stackoverflow > > < > http://stackoverflow.com/questions/3021146/poll2-doesnt-empty-the-event-queue>. > > > > And This is my question on stackoverflow > > < > http://stackoverflow.com/questions/19434157/poll-to-monitor-a-pin-on-beaglebone-black-continuous-output-even-though-pin-n> > > > > I am following this program from ridgerun > > <https://developer.ridgerun.com/wiki/index.php/Gpio-int-test.c> and > made > > minor changes since I want to monitor just one pin and not any other > > files. Changes are highlighted in the code below which I am trying to > > run. (I have pasted just the main. Rest is the same as the code from the > > site) > > The problem is, when I run the program, it continuously outputs "poll() > > GPIO 117 interrupt occurred" even though I haven't connected anything to > > that particular pin and I have to do ctrl+C to stop the execution. > > POLLPRI does not work and the program prints just ... after every > > timeout and I think POLLIN is proper since it is not a priority data. > > > > Where am I going wrong? > > > > I read about potential problems and the program seems to take care of > > the below. > > 1. The poll() doesn't fail. > > 2. read() is called after every poll() so data should be consumed. ( I > > just want the program to notify whenever there is a rising edge saying > > there is an event occured. I do not want to read data from pin. but > > included this to avoid potential pitfalls) > > 3. struct pollfd is being reset inside while loop ( > > memset((void*)fdset,0,sizeof(fdset)); ) > > > > | > > > > int main(int argc, char **argv) > > { > > *struct pollfd fdset[1];* > > *int nfds= 1;* > > int gpio_fd, timeout, rc; > > char *buf[MAX_BUF]; > > unsigned int gpio; > > int len; > > if (argc< 2) { > > printf("Usage: gpio-int <gpio-pin>\n\n"); > > printf("Waits for a change in the GPIO pin voltage > level or input on stdin\n"); > > exit(-1); > > } > > gpio= atoi(argv[1]); > > gpio_export(gpio); > > gpio_set_dir(gpio, 0); > > gpio_set_edge(gpio, "rising"); > > gpio_fd= gpio_fd_open(gpio); > > timeout= POLL_TIMEOUT; > > while (1) { > > memset((void*)fdset, 0, sizeof(fdset)); > > *fdset[0].fd= gpio_fd; > > fdset[0].events= POLLIN;* > > rc= poll(fdset, nfds, timeout); > > if (rc< 0) { > > printf("\npoll() failed!\n"); > > return -1; > > } > > if (rc== 0) { > > printf("."); > > } > > *if (fdset[0].revents& POLLIN) { > > len= read(fdset[0].fd, buf, MAX_BUF);* > > printf("\npoll() GPIO %d interrupt occurred\n", > gpio); > > } > > fflush(stdout); > > } > > gpio_fd_close(gpio_fd); > > return 0; > > } > > > > | > > > > Thanks, > > sudhir > > > > -- > > 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/groups/opt_out. > > > -- > > Jack Mitchell ([email protected] <javascript:>) > Embedded Systems Engineer > http://www.embed.me.uk > > -- > -- 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/groups/opt_out.
