Re: User Space GPIO Interrupt programming - GSoC-2018

Ian Lepore <[email protected]>
Newsgroups gmane.os.freebsd.devel.arm
Message-ID <[email protected]>
On Tue, 2020-12-01 at 02:15 -0300, Dr. Rolf Jansen wrote:
> Am 30.11.2020 um 18:52 schrieb Ian Lepore <[email protected]>:
> > [...]
> > I've just updated the phabricator review with new code.  This adds
> > the
> > detailed versus summary reporting.  I decided the detailed
> > reporting
> > should still be the default like it was before, but now it can
> > handle
> > many events between calls to read(), unlike the old code that only
> > stored one pin change event between calls.  Now it uses a circular
> > buffer, and there's a new ioctl function for increasing the size of
> > the
> > buffer (or switching to summary reporting mode).
> > 
> > I incorporated Christian's test program into the phab review, and
> > added
> > some enhancements to it.  It shows how to read and interpret the
> > new
> > detailed and summary structures, how to convert the monotonic clock
> > event timestaps to UTC if needed (*), and how to handle getting
> > multiple event notifications with each read() call (by passing a
> > big
> > buffer and parsing the structs from it after the call).
> > 
> >  https://reviews.freebsd.org/D27398
> > 
> > (*) The conversion of monotonic to utc time doesn't attempt to deal
> > with the system clock being stepped between the time an event was
> > recorded and when it is printed.  In the real world, system time
> > gets
> > stepped when the system boots, not at random while apps are
> > running.
> > 
> > -- Ian
> 
> I just tested it, by utilizing the gpioevent test tool. And
> everything is working exactly the way, I need it. For example, on the
> BBB, I connected a quite worn-out push button to a GPIO in PU mode
> and to DGND. This button is known to bounce heavily. Now with your
> enhancements and the new tool which reports the timestamps, I could
> do debouncing in software.
> 
> gpioevents -f /dev/gpioc2 -m r 3 er
> 
> Again this is a really bad button, however the BBB seems to be able
> to pick up the bounces in less than a ms resolution. I don’t need
> more.
> 
> Press:
> time 1122.784614858 pin 3 state 1
> [...]
> time 1122.793768903 pin 3 state 1
> time 1122.794032353 pin 3 state 1
> time 1122.797496036 pin 3 state 1
> time 1122.797512911 pin 3 state 1
> 
> Release
> time 1122.933694459 pin 3 state 1
> time 1122.933713000 pin 3 state 1
> time 1122.933749748 pin 3 state 1
> 
> What is the expected significant time resolution. 9 digits suggests
> that it is nanoseconds, however, I tend to believe, that it is
> perhaps microseconds (6 digits after the dp), isn’t it?
> 
> Please let me know, if you want me to test anything else.
> 
> Please inform me once all this becomes committed to head, then I can
> remove the patched files and svn-update the sources for the custom
> kernel.
> 
> Thank you very much.
> 
> Best regards
> 
> Rolf

In my testing on an imx6 (1ghz 4-core) I fed it a 10mhz square wave,
told it to watch for either edge, and was getting an event every 10
microseconds or so.  It does a little better if you're only watching
for rising or falling edge, about every 6-7us, because in that case it
doesn't have to make an extra call to sample the state of the gpio pin
in the interrupt handler.

I think the code is ready to commit as soon as the review gets some
approval feedback.  The one thing that remains to be done is to write a
gpioc(4) manpage documenting all this stuff, which I intend to do some
time in the next week or two, but I don't think I need to hold up the
commit for that.

-- Ian


_______________________________________________
[email protected] mailing list
https://lists.freebsd.org/mailman/listinfo/freebsd-arm
To unsubscribe, send any mail to "[email protected]"
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.