HiPi-BCM2835
view release on metacpan or search on metacpan
BCM2835/src/src/bcm2835.h view on Meta::CPAN
and control the speed in 1/1024 increments from
0/1024 (stopped) through to 1024/1024 (full on). In that case you might set the
clock divider to be 16, and the RANGE to 1024. The pulse repetition frequency will be
1.2MHz/1024 = 1171.875Hz.
\par Interactions with other systems
In order for bcm2835 library SPI to work, you may need to disable the SPI kernel module using:
\code
sudo raspi-config
under Advanced Options - enable Device Tree
under Advanced Options - disable SPI
Reboot.
\endcode
Since bcm2835 accesses the lowest level hardware interfaces (in eh intererests of speed and flexibility)
there can be intercations with other low level software trying to do similar things.
It seems that with "latest" 8.0 Jessie 4.9.24-v7+ kernel PWM just won't
work unless you disable audio. There's a line
\code
dtparam=audio=on
\endcode
in the /boot/config.txt.
Comment it out like this:
\code
#dtparam=audio=on
\endcode
\par Real Time performance constraints
The bcm2835 is a library for user programs (i.e. they run in 'userland').
Such programs are not part of the kernel and are usually
subject to paging and swapping by the kernel while it does other things besides running your program.
This means that you should not expect to get real-time performance or
real-time timing constraints from such programs. In particular, there is no guarantee that the
bcm2835_delay() and bcm2835_delayMicroseconds() will return after exactly the time requested.
In fact, depending on other activity on the host, IO etc, you might get significantly longer delay times
than the one you asked for. So please dont expect to get exactly the time delay you request.
Arjan reports that you can prevent swapping on Linux with the following code fragment:
\code
#define <sched.h>
#define <sys/mman.h>
struct sched_param sp;
memset(&sp, 0, sizeof(sp));
sp.sched_priority = sched_get_priority_max(SCHED_FIFO);
sched_setscheduler(0, SCHED_FIFO, &sp);
mlockall(MCL_CURRENT | MCL_FUTURE);
\endcode
\par Crashing on some versions of Raspbian
Some people have reported that various versions of Rasbian will crash or hang
if certain GPIO pins are toggled: https://github.com/raspberrypi/linux/issues/2550
when using bcm2835.
A workaround is to add this line to your /boot/config.txt:
\code
dtoverlay=gpio-no-irq
\endcode
\par Bindings to other languages
mikem has made Perl bindings available at CPAN:
http://search.cpan.org/~mikem/Device-BCM2835-1.9/lib/Device/BCM2835.pm
Matthew Baker has kindly made Python bindings available at:
https: github.com/mubeta06/py-libbcm2835
Gary Marks has created a Serial Peripheral Interface (SPI) command-line utility
for Raspberry Pi, based on the bcm2835 library. The
utility, spincl, is licensed under Open Source GNU GPLv3 by iP Solutions (http://ipsolutionscorp.com), as a
free download with source included: http://ipsolutionscorp.com/raspberry-pi-spi-utility/
Bindings for Ada are available courtesy Tama McGlinn at https://github.com/TamaMcGlinn/ada_raspio
\par Open Source Licensing GPL V3
This is the appropriate option if you want to share the source code of your
application with everyone you distribute it to, and you also want to give them
the right to share who uses it. If you wish to use this software under Open
Source Licensing, you must contribute all your source code to the open source
community in accordance with the GPL Version 3 when your application is
distributed. See https://www.gnu.org/licenses/gpl-3.0.html and COPYING
\par Commercial Licensing
This is the appropriate option if you are creating proprietary applications
and you are not prepared to distribute and share the source code of your
application. To purchase a commercial license, contact info@airspayce.com
\par Acknowledgements
Some of this code has been inspired by Dom and Gert.
The I2C code has been inspired by Alan Barr.
\par Revision History
\version 1.0 Initial release
\version 1.1 Minor bug fixes
\version 1.2 Added support for SPI
\version 1.3 Added bcm2835_spi_transfern()
\version 1.4 Fixed a problem that prevented SPI CE1 being used. Reported by David Robinson.
\version 1.5 Added bcm2835_close() to deinit the library. Suggested by C?sar Ortiz
\version 1.6 Document testing on 2012-07-15-wheezy-raspbian and Occidentalisv01
Functions bcm2835_gpio_ren(), bcm2835_gpio_fen(), bcm2835_gpio_hen()
bcm2835_gpio_len(), bcm2835_gpio_aren() and bcm2835_gpio_afen() now
changes only the pin specified. Other pins that were already previously
enabled stay enabled.
Added bcm2835_gpio_clr_ren(), bcm2835_gpio_clr_fen(), bcm2835_gpio_clr_hen()
bcm2835_gpio_clr_len(), bcm2835_gpio_clr_aren(), bcm2835_gpio_clr_afen()
to clear the enable for individual pins, suggested by Andreas Sundstrom.
( run in 1.677 second using v1.01-cache-2.11-cpan-7fcb06a456a )