Date: Sun, 12 Apr 2015 11:44:38 +0300 From: Slawa Olhovchenkov <slw@zxy.spb.ru> To: Adrian Chadd <adrian@freebsd.org> Cc: "freebsd-embedded@freebsd.org" <embedded@freebsd.org>, "freebsd-arch@freebsd.org" <freebsd-arch@freebsd.org> Subject: Re: using libgpio to bitbang LCDs! Message-ID: <20150412084438.GM1394@zxy.spb.ru> In-Reply-To: <CAJ-Vmo=n=Lfh_XqkxwAA43jUi7suoPjWV1uSv4VnKNncw3%2BPfw@mail.gmail.com> References: <CAJ-Vmo=n=Lfh_XqkxwAA43jUi7suoPjWV1uSv4VnKNncw3%2BPfw@mail.gmail.com>
next in thread | previous in thread | raw e-mail | index | archive | help
On Sat, Apr 11, 2015 at 05:11:47PM -0700, Adrian Chadd wrote: > Hi! > > I just ported an adafruit LCD driver to FreeBSD. This was a pretty trivial task: > > * convert C++ to C, which was done primarily to not rely on the arduino-isms; > * use libgpio to bitbang the SPI bus needed to write to the LCD. > > It worked third time. First was "oh it runs on 5v power and 3.3v > signaling", and I had it hooked up to 3.3. Second was "Oh, I haven't > set the pins to be output pins yet." Third time worked - just slowly. > > However - using libgpio was just pleasant. Get a handle, set the pin > config, set the pins high/low. It was pretty damned wonderful. > > It turns out that to fill the screen with individual pixel writes > takes quite a few seconds pinning my AR9331 CPU doing ~ 190,000 > syscalls a second. Ian's suggested something sensible - a bulk data > ioctl() that can bit bang a series of GPIO pins in the kernel. Ie, one > syscall, a big chunk of data with instructions and timings. May be best choise is write() or netmap-like interface?
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20150412084438.GM1394>