mirror of https://github.com/joan2937/pigpio
commit
f16fa17748
|
@ -11,3 +11,5 @@ __pycache__
|
||||||
build
|
build
|
||||||
dist
|
dist
|
||||||
*.egg-info
|
*.egg-info
|
||||||
|
wavepad_jitter.py
|
||||||
|
|
||||||
|
|
146
CMakeLists.txt
146
CMakeLists.txt
|
@ -1,14 +1,15 @@
|
||||||
cmake_minimum_required(VERSION 3.0)
|
cmake_minimum_required(VERSION 3.0)
|
||||||
|
|
||||||
project(pigpio)
|
project(pigpio LANGUAGES C VERSION 0.71)
|
||||||
|
|
||||||
set(CMAKE_C_FLAGS "-O3 -Wall -pthread")
|
list (APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_LIST_DIR}/cmake)
|
||||||
set(PIGPIO_FLAGS "-L. -lrt")
|
|
||||||
#set(DESTDIR ${CMAKE_CURRENT_SOURCE_DIR}/build/dest)
|
|
||||||
|
|
||||||
if(NOT DEFINED BUILD_SHARED_LIBS)
|
find_package(Threads REQUIRED)
|
||||||
set(BUILD_SHARED_LIBS "ON")
|
find_package(RT REQUIRED)
|
||||||
endif(NOT DEFINED BUILD_SHARED_LIBS)
|
|
||||||
|
option(BUILD_SHARED_LIBS "Create shared libraries" ON)
|
||||||
|
|
||||||
|
add_compile_options(-Wall)
|
||||||
|
|
||||||
# libpigpio.(so|a)
|
# libpigpio.(so|a)
|
||||||
add_library(pigpio pigpio.c command.c custom.cext)
|
add_library(pigpio pigpio.c command.c custom.cext)
|
||||||
|
@ -19,62 +20,76 @@ add_library(pigpiod_if pigpiod_if.c command.c)
|
||||||
# libpigpiod_if2.(so|a)
|
# libpigpiod_if2.(so|a)
|
||||||
add_library(pigpiod_if2 pigpiod_if2.c command.c)
|
add_library(pigpiod_if2 pigpiod_if2.c command.c)
|
||||||
|
|
||||||
|
|
||||||
# x_pigpio
|
# x_pigpio
|
||||||
add_executable(x_pigpio x_pigpio.c)
|
add_executable(x_pigpio x_pigpio.c)
|
||||||
add_dependencies(x_pigpio pigpio)
|
target_link_libraries(x_pigpio pigpio RT::RT Threads::Threads)
|
||||||
target_link_libraries(x_pigpio
|
|
||||||
${PIGPIO_FLAGS}
|
|
||||||
-lpigpio
|
|
||||||
)
|
|
||||||
|
|
||||||
# x_pigpiod_if
|
# x_pigpiod_if
|
||||||
add_executable(x_pigpiod_if x_pigpiod_if.c)
|
add_executable(x_pigpiod_if x_pigpiod_if.c)
|
||||||
add_dependencies(x_pigpiod_if pigpiod_if)
|
target_link_libraries(x_pigpiod_if pigpiod_if RT::RT Threads::Threads)
|
||||||
target_link_libraries(x_pigpiod_if
|
|
||||||
${PIGPIO_FLAGS}
|
|
||||||
-lpigpiod_if
|
|
||||||
)
|
|
||||||
|
|
||||||
# x_pigpiod_if2
|
# x_pigpiod_if2
|
||||||
add_executable(x_pigpiod_if2 x_pigpiod_if2.c)
|
add_executable(x_pigpiod_if2 x_pigpiod_if2.c)
|
||||||
add_dependencies(x_pigpiod_if2 pigpiod_if2)
|
target_link_libraries(x_pigpiod_if2 pigpiod_if2 RT::RT Threads::Threads)
|
||||||
target_link_libraries(x_pigpiod_if2
|
|
||||||
${PIGPIO_FLAGS}
|
|
||||||
-lpigpiod_if2
|
|
||||||
)
|
|
||||||
|
|
||||||
# pigpiod
|
# pigpiod
|
||||||
add_executable(pigpiod pigpiod.c)
|
add_executable(pigpiod pigpiod.c)
|
||||||
add_dependencies(pigpiod pigpio)
|
target_link_libraries(pigpiod pigpio RT::RT Threads::Threads)
|
||||||
target_link_libraries(pigpiod
|
|
||||||
${PIGPIO_FLAGS}
|
|
||||||
-lpigpio
|
|
||||||
)
|
|
||||||
|
|
||||||
# pigs
|
# pigs
|
||||||
add_executable(pigs pigs.c command.c)
|
add_executable(pigs pigs.c command.c)
|
||||||
|
target_link_libraries(pigs Threads::Threads)
|
||||||
|
|
||||||
# pig2vcd
|
# pig2vcd
|
||||||
add_executable(pig2vcd pig2vcd.c command.c)
|
add_executable(pig2vcd pig2vcd.c command.c)
|
||||||
|
target_link_libraries(pig2vcd Threads::Threads)
|
||||||
|
|
||||||
# install
|
# Configure and install project
|
||||||
install(DIRECTORY
|
|
||||||
DESTINATION ${DESTDIR}/opt/pigpio/cgi
|
include (GenerateExportHeader)
|
||||||
PATTERN ""
|
include (CMakePackageConfigHelpers)
|
||||||
PERMISSIONS OWNER_EXECUTE OWNER_WRITE OWNER_READ
|
|
||||||
GROUP_READ GROUP_EXECUTE
|
generate_export_header(${PROJECT_NAME})
|
||||||
WORLD_READ WORLD_EXECUTE
|
|
||||||
)
|
|
||||||
|
|
||||||
install(TARGETS pigpio pigpiod_if pigpiod_if2 pig2vcd pigpiod pigs
|
install(TARGETS pigpio pigpiod_if pigpiod_if2 pig2vcd pigpiod pigs
|
||||||
LIBRARY DESTINATION ${DESTDIR}/usr/local/lib
|
EXPORT ${PROJECT_NAME}Targets
|
||||||
RUNTIME DESTINATION ${DESTDIR}/usr/local/bin
|
LIBRARY DESTINATION lib
|
||||||
ARCHIVE DESTINATION ${DESTDIR}/usr/local/lib
|
ARCHIVE DESTINATION lib
|
||||||
|
RUNTIME DESTINATION bin
|
||||||
|
INCLUDES DESTINATION include
|
||||||
|
)
|
||||||
|
|
||||||
|
write_basic_package_version_file(
|
||||||
|
"${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake"
|
||||||
|
VERSION ${${PROJECT_NAME}_VERSION}
|
||||||
|
COMPATIBILITY AnyNewerVersion
|
||||||
|
)
|
||||||
|
|
||||||
|
export(EXPORT ${PROJECT_NAME}Targets
|
||||||
|
FILE "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Targets.cmake"
|
||||||
|
NAMESPACE pigpio::
|
||||||
|
)
|
||||||
|
|
||||||
|
set(ConfigPackageLocation lib/cmake/${PROJECT_NAME})
|
||||||
|
install(EXPORT ${PROJECT_NAME}Targets
|
||||||
|
FILE
|
||||||
|
${PROJECT_NAME}Targets.cmake
|
||||||
|
NAMESPACE
|
||||||
|
pigpio::
|
||||||
|
DESTINATION
|
||||||
|
${ConfigPackageLocation}
|
||||||
|
)
|
||||||
|
|
||||||
|
install(
|
||||||
|
FILES
|
||||||
|
${CMAKE_CURRENT_LIST_DIR}/cmake/${PROJECT_NAME}Config.cmake
|
||||||
|
"${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake"
|
||||||
|
DESTINATION
|
||||||
|
${ConfigPackageLocation}
|
||||||
)
|
)
|
||||||
|
|
||||||
install(FILES pigpio.h pigpiod_if.h pigpiod_if2.h
|
install(FILES pigpio.h pigpiod_if.h pigpiod_if2.h
|
||||||
DESTINATION ${DESTDIR}/usr/local/include
|
DESTINATION include
|
||||||
PERMISSIONS OWNER_READ OWNER_WRITE
|
PERMISSIONS OWNER_READ OWNER_WRITE
|
||||||
GROUP_READ
|
GROUP_READ
|
||||||
WORLD_READ
|
WORLD_READ
|
||||||
|
@ -82,7 +97,7 @@ install(FILES pigpio.h pigpiod_if.h pigpiod_if2.h
|
||||||
|
|
||||||
file(GLOB man_1_SRC "*.1")
|
file(GLOB man_1_SRC "*.1")
|
||||||
install(FILES ${man_1_SRC}
|
install(FILES ${man_1_SRC}
|
||||||
DESTINATION ${DESTDIR}/usr/local/man/man1
|
DESTINATION man/man1
|
||||||
PERMISSIONS OWNER_READ OWNER_WRITE
|
PERMISSIONS OWNER_READ OWNER_WRITE
|
||||||
GROUP_READ
|
GROUP_READ
|
||||||
WORLD_READ
|
WORLD_READ
|
||||||
|
@ -90,48 +105,23 @@ install(FILES ${man_1_SRC}
|
||||||
|
|
||||||
file(GLOB man_3_SRC "*.3")
|
file(GLOB man_3_SRC "*.3")
|
||||||
install(FILES ${man_3_SRC}
|
install(FILES ${man_3_SRC}
|
||||||
DESTINATION ${DESTDIR}/usr/local/man/man3
|
DESTINATION man/man3
|
||||||
PERMISSIONS OWNER_READ OWNER_WRITE
|
PERMISSIONS OWNER_READ OWNER_WRITE
|
||||||
GROUP_READ
|
GROUP_READ
|
||||||
WORLD_READ
|
WORLD_READ
|
||||||
)
|
)
|
||||||
|
|
||||||
file(GLOB setup_SRC "setup.py")
|
# Install python modules.
|
||||||
find_program(PYTHON2_FOUND python2)
|
find_package(Python COMPONENTS Interpreter QUIET)
|
||||||
if(PYTHON2_FOUND)
|
|
||||||
install(CODE "execute_process(COMMAND cd ${CMAKE_SOURCE_DIR} && python2 ${setup_SRC} install)")
|
if(Python_FOUND)
|
||||||
endif()
|
configure_file(${CMAKE_CURRENT_LIST_DIR}/cmake/setup.py.in
|
||||||
find_program(PYTHON3_FOUND python3)
|
${CMAKE_CURRENT_BINARY_DIR}/setup.py
|
||||||
if(PYTHON3_FOUND)
|
)
|
||||||
install(CODE "execute_process(COMMAND cd ${CMAKE_SOURCE_DIR} && python3 ${setup_SRC} install)")
|
|
||||||
|
install(CODE "execute_process(COMMAND ${Python_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/setup.py install)")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
install(CODE "execute_process(COMMAND ldconfig)")
|
# package project
|
||||||
|
|
||||||
# uninstall
|
include (CPack)
|
||||||
if(PYTHON2_FOUND)
|
|
||||||
set(PY2_CMD python2 ${setup_SRC} install --record /tmp/pigpio > /dev/null)
|
|
||||||
set(PY2_CMD ${PY2_CMD} && xargs rm -f < /tmp/pigpio > /dev/null)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if(PYTHON3_FOUND)
|
|
||||||
set(PY3_CMD python3 ${setup_SRC} install --record /tmp/pigpio > /dev/null)
|
|
||||||
set(PY3_CMD ${PY3_CMD} && xargs rm -f < /tmp/pigpio > /dev/null)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
add_custom_target(uninstall
|
|
||||||
COMMAND rm -f ${DESTDIR}/usr/local/include/pigpio.h
|
|
||||||
COMMAND rm -f ${DESTDIR}/usr/local/include/pigpiod_if.h
|
|
||||||
COMMAND rm -f ${DESTDIR}/usr/local/include/pigpiod_if2.h
|
|
||||||
COMMAND rm -f ${DESTDIR}/usr/local/lib/libpigpio.so
|
|
||||||
COMMAND rm -f ${DESTDIR}/usr/local/lib/libpigpiod_if.so
|
|
||||||
COMMAND rm -f ${DESTDIR}/usr/local/lib/libpigpiod_if2.so
|
|
||||||
COMMAND rm -f ${DESTDIR}/usr/local/bin/pig2vcd
|
|
||||||
COMMAND rm -f ${DESTDIR}/usr/local/bin/pigpiod
|
|
||||||
COMMAND rm -f ${DESTDIR}/usr/local/bin/pigs
|
|
||||||
COMMAND cd ${CMAKE_SOURCE_DIR} && ${PY2_CMD}
|
|
||||||
COMMAND cd ${CMAKE_SOURCE_DIR} && ${PY3_CMD}
|
|
||||||
COMMAND rm -f ${DESTDIR}/usr/local/man/man1/pig*.1
|
|
||||||
COMMAND rm -f ${DESTDIR}/usr/local/man/man3/pig*.3
|
|
||||||
COMMAND ldconfig
|
|
||||||
)
|
|
|
@ -0,0 +1,39 @@
|
||||||
|
# FindRT.cmake - Try to find the RT library
|
||||||
|
# Once done this will define
|
||||||
|
#
|
||||||
|
# RT_FOUND - System has rt
|
||||||
|
# RT_INCLUDE_DIR - The rt include directory
|
||||||
|
# RT_LIBRARIES - The libraries needed to use rt
|
||||||
|
# RT_DEFINITIONS - Compiler switches required for using rt
|
||||||
|
#
|
||||||
|
# Also creates an import target called RT::RT
|
||||||
|
|
||||||
|
find_path (RT_INCLUDE_DIR NAMES time.h
|
||||||
|
PATHS
|
||||||
|
/usr
|
||||||
|
/usr/local
|
||||||
|
/opt
|
||||||
|
PATH_SUFFIXES
|
||||||
|
)
|
||||||
|
|
||||||
|
find_library(RT_LIBRARIES NAMES rt
|
||||||
|
PATHS
|
||||||
|
/usr
|
||||||
|
/usr/local
|
||||||
|
/opt
|
||||||
|
)
|
||||||
|
|
||||||
|
include(FindPackageHandleStandardArgs)
|
||||||
|
|
||||||
|
FIND_PACKAGE_HANDLE_STANDARD_ARGS(rt DEFAULT_MSG RT_LIBRARIES RT_INCLUDE_DIR)
|
||||||
|
|
||||||
|
mark_as_advanced(RT_INCLUDE_DIR RT_LIBRARIES)
|
||||||
|
|
||||||
|
if (NOT TARGET RT::RT)
|
||||||
|
add_library(RT::RT INTERFACE IMPORTED)
|
||||||
|
|
||||||
|
set_target_properties(RT::RT PROPERTIES
|
||||||
|
INTERFACE_INCLUDE_DIRECTORIES ${RT_INCLUDE_DIR}
|
||||||
|
INTERFACE_LINK_LIBRARIES ${RT_LIBRARIES}
|
||||||
|
)
|
||||||
|
endif()
|
|
@ -0,0 +1 @@
|
||||||
|
include (${CMAKE_CURRENT_LIST_DIR}/pigpioTargets.cmake)
|
|
@ -0,0 +1,24 @@
|
||||||
|
#!/usr/bin/env python
|
||||||
|
|
||||||
|
from distutils.core import setup
|
||||||
|
|
||||||
|
setup(name='pigpio',
|
||||||
|
version='1.44',
|
||||||
|
author='joan',
|
||||||
|
author_email='joan@abyz.me.uk',
|
||||||
|
maintainer='joan',
|
||||||
|
maintainer_email='joan@abyz.me.uk',
|
||||||
|
url='http://abyz.me.uk/rpi/pigpio/python.html',
|
||||||
|
description='Raspberry Pi GPIO module',
|
||||||
|
long_description='Raspberry Pi Python module to access the pigpio daemon',
|
||||||
|
download_url='http://abyz.me.uk/rpi/pigpio/pigpio.zip',
|
||||||
|
license='unlicense.org',
|
||||||
|
py_modules=['pigpio'],
|
||||||
|
keywords=['raspberrypi', 'gpio',],
|
||||||
|
classifiers=[
|
||||||
|
"Programming Language :: Python :: 2",
|
||||||
|
"Programming Language :: Python :: 3",
|
||||||
|
],
|
||||||
|
package_dir={ '': '${CMAKE_CURRENT_SOURCE_DIR}'}
|
||||||
|
)
|
||||||
|
|
46
pigpio.3
46
pigpio.3
|
@ -1682,6 +1682,15 @@ will be a latency.
|
||||||
|
|
||||||
.br
|
.br
|
||||||
|
|
||||||
|
.br
|
||||||
|
If you want to track the level of more than one GPIO do so by
|
||||||
|
maintaining the state in the callback. Do not use \fBgpioRead\fP.
|
||||||
|
Remember the event that triggered the callback may have
|
||||||
|
happened several milliseconds before and the GPIO may have
|
||||||
|
changed level many times since then.
|
||||||
|
|
||||||
|
.br
|
||||||
|
|
||||||
.br
|
.br
|
||||||
The tick value is the time stamp of the sample in microseconds, see
|
The tick value is the time stamp of the sample in microseconds, see
|
||||||
\fBgpioTick\fP for more details.
|
\fBgpioTick\fP for more details.
|
||||||
|
@ -4181,12 +4190,6 @@ queue and the master removes it.
|
||||||
|
|
||||||
.br
|
.br
|
||||||
|
|
||||||
.br
|
|
||||||
This function is not available on the BCM2711 (e.g. as
|
|
||||||
used in the Pi4B).
|
|
||||||
|
|
||||||
.br
|
|
||||||
|
|
||||||
.br
|
.br
|
||||||
I can't get SPI to work properly. I tried with a
|
I can't get SPI to work properly. I tried with a
|
||||||
control word of 0x303 and swapped MISO and MOSI.
|
control word of 0x303 and swapped MISO and MOSI.
|
||||||
|
@ -4249,14 +4252,37 @@ that mode until a different control word is sent.
|
||||||
.br
|
.br
|
||||||
|
|
||||||
.br
|
.br
|
||||||
The BSC peripheral uses GPIO 18 (SDA) and 19 (SCL) in I2C mode
|
GPIO used for models other than those based on the BCM2711.
|
||||||
and GPIO 18 (MOSI), 19 (SCLK), 20 (MISO), and 21 (CE) in SPI mode. You
|
|
||||||
need to swap MISO/MOSI between master and slave.
|
|
||||||
|
|
||||||
.br
|
.br
|
||||||
|
|
||||||
.br
|
.br
|
||||||
When a zero control word is received GPIO 18-21 will be reset
|
SDA SCL MOSI SCLK MISO CE
|
||||||
|
.br
|
||||||
|
I2C 18 19 - - - -
|
||||||
|
.br
|
||||||
|
SPI - - 18 19 20 21
|
||||||
|
.br
|
||||||
|
|
||||||
|
.br
|
||||||
|
|
||||||
|
.br
|
||||||
|
GPIO used for models based on the BCM2711 (e.g. the Pi4B).
|
||||||
|
|
||||||
|
.br
|
||||||
|
|
||||||
|
.br
|
||||||
|
SDA SCL MOSI SCLK MISO CE
|
||||||
|
.br
|
||||||
|
I2C 10 11 - - - -
|
||||||
|
.br
|
||||||
|
SPI - - 10 11 9 8
|
||||||
|
.br
|
||||||
|
|
||||||
|
.br
|
||||||
|
|
||||||
|
.br
|
||||||
|
When a zero control word is received the used GPIO will be reset
|
||||||
to INPUT mode.
|
to INPUT mode.
|
||||||
|
|
||||||
.br
|
.br
|
||||||
|
|
59
pigpio.c
59
pigpio.c
|
@ -25,7 +25,7 @@ OTHER DEALINGS IN THE SOFTWARE.
|
||||||
For more information, please refer to <http://unlicense.org/>
|
For more information, please refer to <http://unlicense.org/>
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* pigpio version 74 */
|
/* pigpio version 75 */
|
||||||
|
|
||||||
/* include ------------------------------------------------------- */
|
/* include ------------------------------------------------------- */
|
||||||
|
|
||||||
|
@ -4768,7 +4768,7 @@ int spiClose(unsigned handle)
|
||||||
if (spiInfo[handle].state != PI_SPI_OPENED)
|
if (spiInfo[handle].state != PI_SPI_OPENED)
|
||||||
SOFT_ERROR(PI_BAD_HANDLE, "bad handle (%d)", handle);
|
SOFT_ERROR(PI_BAD_HANDLE, "bad handle (%d)", handle);
|
||||||
|
|
||||||
spiInfo[handle].state = PI_I2C_CLOSED;
|
spiInfo[handle].state = PI_SPI_CLOSED;
|
||||||
|
|
||||||
if (!spiAnyOpen(spiInfo[handle].flags))
|
if (!spiAnyOpen(spiInfo[handle].flags))
|
||||||
spiTerm(spiInfo[handle].flags); /* terminate on last close */
|
spiTerm(spiInfo[handle].flags); /* terminate on last close */
|
||||||
|
@ -10730,35 +10730,69 @@ int bbI2CZip(
|
||||||
|
|
||||||
void bscInit(int mode)
|
void bscInit(int mode)
|
||||||
{
|
{
|
||||||
|
int sda, scl, miso, ce;
|
||||||
|
|
||||||
bscsReg[BSC_CR]=0; /* clear device */
|
bscsReg[BSC_CR]=0; /* clear device */
|
||||||
bscsReg[BSC_RSR]=0; /* clear underrun and overrun errors */
|
bscsReg[BSC_RSR]=0; /* clear underrun and overrun errors */
|
||||||
bscsReg[BSC_SLV]=0; /* clear I2C slave address */
|
bscsReg[BSC_SLV]=0; /* clear I2C slave address */
|
||||||
bscsReg[BSC_IMSC]=0xf; /* mask off all interrupts */
|
bscsReg[BSC_IMSC]=0xf; /* mask off all interrupts */
|
||||||
bscsReg[BSC_ICR]=0x0f; /* clear all interrupts */
|
bscsReg[BSC_ICR]=0x0f; /* clear all interrupts */
|
||||||
|
|
||||||
gpioSetMode(BSC_SDA_MOSI, PI_ALT3);
|
if (pi_is_2711)
|
||||||
gpioSetMode(BSC_SCL_SCLK, PI_ALT3);
|
{
|
||||||
|
sda = BSC_SDA_MOSI_2711;
|
||||||
|
scl = BSC_SCL_SCLK_2711;
|
||||||
|
miso = BSC_MISO_2711;
|
||||||
|
ce = BSC_CE_N_2711;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
sda = BSC_SDA_MOSI;
|
||||||
|
scl = BSC_SCL_SCLK;
|
||||||
|
miso = BSC_MISO;
|
||||||
|
ce = BSC_CE_N;
|
||||||
|
}
|
||||||
|
|
||||||
|
gpioSetMode(sda, PI_ALT3);
|
||||||
|
gpioSetMode(scl, PI_ALT3);
|
||||||
|
|
||||||
if (mode > 1) /* SPI uses all GPIO */
|
if (mode > 1) /* SPI uses all GPIO */
|
||||||
{
|
{
|
||||||
gpioSetMode(BSC_MISO, PI_ALT3);
|
gpioSetMode(miso, PI_ALT3);
|
||||||
gpioSetMode(BSC_CE_N, PI_ALT3);
|
gpioSetMode(ce, PI_ALT3);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void bscTerm(int mode)
|
void bscTerm(int mode)
|
||||||
{
|
{
|
||||||
|
int sda, scl, miso, ce;
|
||||||
|
|
||||||
bscsReg[BSC_CR] = 0; /* clear device */
|
bscsReg[BSC_CR] = 0; /* clear device */
|
||||||
bscsReg[BSC_RSR]=0; /* clear underrun and overrun errors */
|
bscsReg[BSC_RSR]=0; /* clear underrun and overrun errors */
|
||||||
bscsReg[BSC_SLV]=0; /* clear I2C slave address */
|
bscsReg[BSC_SLV]=0; /* clear I2C slave address */
|
||||||
|
|
||||||
gpioSetMode(BSC_SDA_MOSI, PI_INPUT);
|
if (pi_is_2711)
|
||||||
gpioSetMode(BSC_SCL_SCLK, PI_INPUT);
|
{
|
||||||
|
sda = BSC_SDA_MOSI_2711;
|
||||||
|
scl = BSC_SCL_SCLK_2711;
|
||||||
|
miso = BSC_MISO_2711;
|
||||||
|
ce = BSC_CE_N_2711;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
sda = BSC_SDA_MOSI;
|
||||||
|
scl = BSC_SCL_SCLK;
|
||||||
|
miso = BSC_MISO;
|
||||||
|
ce = BSC_CE_N;
|
||||||
|
}
|
||||||
|
|
||||||
|
gpioSetMode(sda, PI_INPUT);
|
||||||
|
gpioSetMode(scl, PI_INPUT);
|
||||||
|
|
||||||
if (mode > 1)
|
if (mode > 1)
|
||||||
{
|
{
|
||||||
gpioSetMode(BSC_MISO, PI_INPUT);
|
gpioSetMode(miso, PI_INPUT);
|
||||||
gpioSetMode(BSC_CE_N, PI_INPUT);
|
gpioSetMode(ce, PI_INPUT);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -10778,9 +10812,6 @@ int bscXfer(bsc_xfer_t *xfer)
|
||||||
|
|
||||||
CHECK_INITED;
|
CHECK_INITED;
|
||||||
|
|
||||||
if (pi_is_2711)
|
|
||||||
SOFT_ERROR(PI_NOT_ON_BCM2711, "SPI/BSC slave not available on BCM2711");
|
|
||||||
|
|
||||||
eventAlert[PI_EVENT_BSC].ignore = 1;
|
eventAlert[PI_EVENT_BSC].ignore = 1;
|
||||||
|
|
||||||
if (xfer->control)
|
if (xfer->control)
|
||||||
|
@ -10794,7 +10825,7 @@ int bscXfer(bsc_xfer_t *xfer)
|
||||||
|
|
||||||
if (mode > bscMode)
|
if (mode > bscMode)
|
||||||
{
|
{
|
||||||
bscInit(bscMode);
|
bscInit(mode);
|
||||||
bscMode = mode;
|
bscMode = mode;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
32
pigpio.h
32
pigpio.h
|
@ -30,7 +30,7 @@ For more information, please refer to <http://unlicense.org/>
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include <pthread.h>
|
#include <pthread.h>
|
||||||
|
|
||||||
#define PIGPIO_VERSION 74
|
#define PIGPIO_VERSION 75
|
||||||
|
|
||||||
/*TEXT
|
/*TEXT
|
||||||
|
|
||||||
|
@ -797,6 +797,11 @@ typedef void *(gpioThreadFunc_t) (void *);
|
||||||
#define BSC_MISO 20
|
#define BSC_MISO 20
|
||||||
#define BSC_CE_N 21
|
#define BSC_CE_N 21
|
||||||
|
|
||||||
|
#define BSC_SDA_MOSI_2711 10
|
||||||
|
#define BSC_SCL_SCLK_2711 11
|
||||||
|
#define BSC_MISO_2711 9
|
||||||
|
#define BSC_CE_N_2711 8
|
||||||
|
|
||||||
/* Longest busy delay */
|
/* Longest busy delay */
|
||||||
|
|
||||||
#define PI_MAX_BUSY_DELAY 100
|
#define PI_MAX_BUSY_DELAY 100
|
||||||
|
@ -1439,6 +1444,12 @@ once per level change since the last time the thread was activated.
|
||||||
i.e. The active alert functions will get all level changes but there
|
i.e. The active alert functions will get all level changes but there
|
||||||
will be a latency.
|
will be a latency.
|
||||||
|
|
||||||
|
If you want to track the level of more than one GPIO do so by
|
||||||
|
maintaining the state in the callback. Do not use [*gpioRead*].
|
||||||
|
Remember the event that triggered the callback may have
|
||||||
|
happened several milliseconds before and the GPIO may have
|
||||||
|
changed level many times since then.
|
||||||
|
|
||||||
The tick value is the time stamp of the sample in microseconds, see
|
The tick value is the time stamp of the sample in microseconds, see
|
||||||
[*gpioTick*] for more details.
|
[*gpioTick*] for more details.
|
||||||
|
|
||||||
|
@ -2913,9 +2924,6 @@ The output process is simple. You simply append data to the FIFO
|
||||||
buffer on the chip. This works like a queue, you add data to the
|
buffer on the chip. This works like a queue, you add data to the
|
||||||
queue and the master removes it.
|
queue and the master removes it.
|
||||||
|
|
||||||
This function is not available on the BCM2711 (e.g. as
|
|
||||||
used in the Pi4B).
|
|
||||||
|
|
||||||
I can't get SPI to work properly. I tried with a
|
I can't get SPI to work properly. I tried with a
|
||||||
control word of 0x303 and swapped MISO and MOSI.
|
control word of 0x303 and swapped MISO and MOSI.
|
||||||
|
|
||||||
|
@ -2947,11 +2955,19 @@ in rxBuf.
|
||||||
Note that the control word sets the BSC mode. The BSC will stay in
|
Note that the control word sets the BSC mode. The BSC will stay in
|
||||||
that mode until a different control word is sent.
|
that mode until a different control word is sent.
|
||||||
|
|
||||||
The BSC peripheral uses GPIO 18 (SDA) and 19 (SCL) in I2C mode
|
GPIO used for models other than those based on the BCM2711.
|
||||||
and GPIO 18 (MOSI), 19 (SCLK), 20 (MISO), and 21 (CE) in SPI mode. You
|
|
||||||
need to swap MISO/MOSI between master and slave.
|
|
||||||
|
|
||||||
When a zero control word is received GPIO 18-21 will be reset
|
@ SDA @ SCL @ MOSI @ SCLK @ MISO @ CE
|
||||||
|
I2C @ 18 @ 19 @ - @ - @ - @ -
|
||||||
|
SPI @ - @ - @ 18 @ 19 @ 20 @ 21
|
||||||
|
|
||||||
|
GPIO used for models based on the BCM2711 (e.g. the Pi4B).
|
||||||
|
|
||||||
|
@ SDA @ SCL @ MOSI @ SCLK @ MISO @ CE
|
||||||
|
I2C @ 10 @ 11 @ - @ - @ - @ -
|
||||||
|
SPI @ - @ - @ 10 @ 11 @ 9 @ 8
|
||||||
|
|
||||||
|
When a zero control word is received the used GPIO will be reset
|
||||||
to INPUT mode.
|
to INPUT mode.
|
||||||
|
|
||||||
The returned function value is the status of the transfer (see below).
|
The returned function value is the status of the transfer (see below).
|
||||||
|
|
60
pigpio.py
60
pigpio.py
|
@ -330,7 +330,7 @@ import threading
|
||||||
import os
|
import os
|
||||||
import atexit
|
import atexit
|
||||||
|
|
||||||
VERSION = "1.45"
|
VERSION = "1.46"
|
||||||
|
|
||||||
exceptions = True
|
exceptions = True
|
||||||
|
|
||||||
|
@ -3557,13 +3557,9 @@ class pi():
|
||||||
buffer on the chip. This works like a queue, you add data to the
|
buffer on the chip. This works like a queue, you add data to the
|
||||||
queue and the master removes it.
|
queue and the master removes it.
|
||||||
|
|
||||||
This function is not available on the BCM2711 (e.g. as
|
|
||||||
used in the Pi4B).
|
|
||||||
|
|
||||||
I can't get SPI to work properly. I tried with a
|
I can't get SPI to work properly. I tried with a
|
||||||
control word of 0x303 and swapped MISO and MOSI.
|
control word of 0x303 and swapped MISO and MOSI.
|
||||||
|
|
||||||
|
|
||||||
The function sets the BSC mode, writes any data in
|
The function sets the BSC mode, writes any data in
|
||||||
the transmit buffer to the BSC transmit FIFO, and
|
the transmit buffer to the BSC transmit FIFO, and
|
||||||
copies any data in the BSC receive FIFO to the
|
copies any data in the BSC receive FIFO to the
|
||||||
|
@ -3580,12 +3576,19 @@ class pi():
|
||||||
Note that the control word sets the BSC mode. The BSC will
|
Note that the control word sets the BSC mode. The BSC will
|
||||||
stay in that mode until a different control word is sent.
|
stay in that mode until a different control word is sent.
|
||||||
|
|
||||||
The BSC peripheral uses GPIO 18 (SDA) and 19 (SCL)
|
GPIO used for models other than those based on the BCM2711.
|
||||||
in I2C mode and GPIO 18 (MOSI), 19 (SCLK), 20 (MISO),
|
|
||||||
and 21 (CE) in SPI mode. You need to swap MISO/MOSI
|
|
||||||
between master and slave.
|
|
||||||
|
|
||||||
When a zero control word is received GPIO 18-21 will be reset
|
@ SDA @ SCL @ MOSI @ SCLK @ MISO @ CE
|
||||||
|
I2C @ 18 @ 19 @ - @ - @ - @ -
|
||||||
|
SPI @ - @ - @ 18 @ 19 @ 20 @ 21
|
||||||
|
|
||||||
|
GPIO used for models based on the BCM2711 (e.g. the Pi4B).
|
||||||
|
|
||||||
|
@ SDA @ SCL @ MOSI @ SCLK @ MISO @ CE
|
||||||
|
I2C @ 10 @ 11 @ - @ - @ - @ -
|
||||||
|
SPI @ - @ - @ 10 @ 11 @ 9 @ 8
|
||||||
|
|
||||||
|
When a zero control word is received the used GPIO will be reset
|
||||||
to INPUT mode.
|
to INPUT mode.
|
||||||
|
|
||||||
bsc_control consists of the following bits:
|
bsc_control consists of the following bits:
|
||||||
|
@ -3684,10 +3687,10 @@ class pi():
|
||||||
(and will contain the error code).
|
(and will contain the error code).
|
||||||
|
|
||||||
Note that an i2c_address of 0 may be used to close
|
Note that an i2c_address of 0 may be used to close
|
||||||
the BSC device and reassign the used GPIO (18/19)
|
the BSC device and reassign the used GPIO as inputs.
|
||||||
as inputs.
|
|
||||||
|
|
||||||
This example assumes GPIO 2/3 are connected to GPIO 18/19.
|
This example assumes GPIO 2/3 are connected to GPIO 18/19
|
||||||
|
(GPIO 10/11 on the BCM2711).
|
||||||
|
|
||||||
...
|
...
|
||||||
#!/usr/bin/env python
|
#!/usr/bin/env python
|
||||||
|
@ -4939,6 +4942,37 @@ class pi():
|
||||||
A GPIO may have multiple callbacks (although I can't think of
|
A GPIO may have multiple callbacks (although I can't think of
|
||||||
a reason to do so).
|
a reason to do so).
|
||||||
|
|
||||||
|
The GPIO are sampled at a rate set when the pigpio daemon
|
||||||
|
is started (default 5 us).
|
||||||
|
|
||||||
|
The number of samples per second is given in the following table.
|
||||||
|
|
||||||
|
. .
|
||||||
|
samples
|
||||||
|
per sec
|
||||||
|
|
||||||
|
1 1,000,000
|
||||||
|
2 500,000
|
||||||
|
sample 4 250,000
|
||||||
|
rate 5 200,000
|
||||||
|
(us) 8 125,000
|
||||||
|
10 100,000
|
||||||
|
. .
|
||||||
|
|
||||||
|
GPIO level changes shorter than the sample rate may be missed.
|
||||||
|
|
||||||
|
The daemon software which generates the callbacks is triggered
|
||||||
|
1000 times per second. The callbacks will be called once per
|
||||||
|
level change since the last time they were called.
|
||||||
|
i.e. The callbacks will get all level changes but there will
|
||||||
|
be a latency.
|
||||||
|
|
||||||
|
If you want to track the level of more than one GPIO do so by
|
||||||
|
maintaining the state in the callback. Do not use [*read*].
|
||||||
|
Remember the event that triggered the callback may have
|
||||||
|
happened several milliseconds before and the GPIO may have
|
||||||
|
changed level many times since then.
|
||||||
|
|
||||||
...
|
...
|
||||||
def cbf(gpio, level, tick):
|
def cbf(gpio, level, tick):
|
||||||
print(gpio, level, tick)
|
print(gpio, level, tick)
|
||||||
|
|
100
pigpiod_if2.3
100
pigpiod_if2.3
|
@ -5920,6 +5920,66 @@ tick 32 bit The number of microseconds since boot
|
||||||
|
|
||||||
.EE
|
.EE
|
||||||
|
|
||||||
|
.br
|
||||||
|
|
||||||
|
.br
|
||||||
|
The GPIO are sampled at a rate set when the pigpio daemon
|
||||||
|
is started (default 5 us).
|
||||||
|
|
||||||
|
.br
|
||||||
|
|
||||||
|
.br
|
||||||
|
The number of samples per second is given in the following table.
|
||||||
|
|
||||||
|
.br
|
||||||
|
|
||||||
|
.br
|
||||||
|
|
||||||
|
.EX
|
||||||
|
samples
|
||||||
|
.br
|
||||||
|
per sec
|
||||||
|
.br
|
||||||
|
|
||||||
|
.br
|
||||||
|
1 1,000,000
|
||||||
|
.br
|
||||||
|
2 500,000
|
||||||
|
.br
|
||||||
|
sample 4 250,000
|
||||||
|
.br
|
||||||
|
rate 5 200,000
|
||||||
|
.br
|
||||||
|
(us) 8 125,000
|
||||||
|
.br
|
||||||
|
10 100,000
|
||||||
|
.br
|
||||||
|
|
||||||
|
.EE
|
||||||
|
|
||||||
|
.br
|
||||||
|
|
||||||
|
.br
|
||||||
|
GPIO level changes shorter than the sample rate may be missed.
|
||||||
|
|
||||||
|
.br
|
||||||
|
|
||||||
|
.br
|
||||||
|
The daemon software which generates the callbacks is triggered
|
||||||
|
1000 times per second. The callbacks will be called once per
|
||||||
|
level change since the last time they were called.
|
||||||
|
i.e. The callbacks will get all level changes but there will
|
||||||
|
be a latency.
|
||||||
|
|
||||||
|
.br
|
||||||
|
|
||||||
|
.br
|
||||||
|
If you want to track the level of more than one GPIO do so by
|
||||||
|
maintaining the state in the callback. Do not use \fBgpio_read\fP.
|
||||||
|
Remember the event that triggered the callback may have
|
||||||
|
happened several milliseconds before and the GPIO may have
|
||||||
|
changed level many times since then.
|
||||||
|
|
||||||
.IP "\fBint callback_ex(int pi, unsigned user_gpio, unsigned edge, CBFuncEx_t f, void *userdata)\fP"
|
.IP "\fBint callback_ex(int pi, unsigned user_gpio, unsigned edge, CBFuncEx_t f, void *userdata)\fP"
|
||||||
.IP "" 4
|
.IP "" 4
|
||||||
This function initialises a new callback.
|
This function initialises a new callback.
|
||||||
|
@ -6072,12 +6132,6 @@ queue and the master removes it.
|
||||||
|
|
||||||
.br
|
.br
|
||||||
|
|
||||||
.br
|
|
||||||
This function is not available on the BCM2711 (e.g. as
|
|
||||||
used in the Pi4B).
|
|
||||||
|
|
||||||
.br
|
|
||||||
|
|
||||||
.br
|
.br
|
||||||
I can't get SPI to work properly. I tried with a
|
I can't get SPI to work properly. I tried with a
|
||||||
control word of 0x303 and swapped MISO and MOSI.
|
control word of 0x303 and swapped MISO and MOSI.
|
||||||
|
@ -6160,14 +6214,37 @@ that mode until a different control word is sent.
|
||||||
.br
|
.br
|
||||||
|
|
||||||
.br
|
.br
|
||||||
The BSC peripheral uses GPIO 18 (SDA) and 19 (SCL) in I2C mode
|
GPIO used for models other than those based on the BCM2711.
|
||||||
and GPIO 18 (MOSI), 19 (SCLK), 20 (MISO), and 21 (CE) in SPI mode. You
|
|
||||||
need to swap MISO/MOSI between master and slave.
|
|
||||||
|
|
||||||
.br
|
.br
|
||||||
|
|
||||||
.br
|
.br
|
||||||
When a zero control word is received GPIO 18-21 will be reset
|
SDA SCL MOSI SCLK MISO CE
|
||||||
|
.br
|
||||||
|
I2C 18 19 - - - -
|
||||||
|
.br
|
||||||
|
SPI - - 18 19 20 21
|
||||||
|
.br
|
||||||
|
|
||||||
|
.br
|
||||||
|
|
||||||
|
.br
|
||||||
|
GPIO used for models based on the BCM2711 (e.g. the Pi4B).
|
||||||
|
|
||||||
|
.br
|
||||||
|
|
||||||
|
.br
|
||||||
|
SDA SCL MOSI SCLK MISO CE
|
||||||
|
.br
|
||||||
|
I2C 10 11 - - - -
|
||||||
|
.br
|
||||||
|
SPI - - 10 11 9 8
|
||||||
|
.br
|
||||||
|
|
||||||
|
.br
|
||||||
|
|
||||||
|
.br
|
||||||
|
When a zero control word is received the used GPIO will be reset
|
||||||
to INPUT mode.
|
to INPUT mode.
|
||||||
|
|
||||||
.br
|
.br
|
||||||
|
@ -6390,8 +6467,7 @@ If there was an error the status will be less than zero
|
||||||
|
|
||||||
.br
|
.br
|
||||||
Note that an i2c_address of 0 may be used to close
|
Note that an i2c_address of 0 may be used to close
|
||||||
the BSC device and reassign the used GPIO (18/19)
|
the BSC device and reassign the used GPIO as inputs.
|
||||||
as inputs.
|
|
||||||
|
|
||||||
.IP "\fBint event_callback(int pi, unsigned event, evtCBFunc_t f)\fP"
|
.IP "\fBint event_callback(int pi, unsigned event, evtCBFunc_t f)\fP"
|
||||||
.IP "" 4
|
.IP "" 4
|
||||||
|
|
|
@ -25,7 +25,7 @@ OTHER DEALINGS IN THE SOFTWARE.
|
||||||
For more information, please refer to <http://unlicense.org/>
|
For more information, please refer to <http://unlicense.org/>
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* PIGPIOD_IF2_VERSION 16 */
|
/* PIGPIOD_IF2_VERSION 17 */
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
|
|
@ -30,7 +30,7 @@ For more information, please refer to <http://unlicense.org/>
|
||||||
|
|
||||||
#include "pigpio.h"
|
#include "pigpio.h"
|
||||||
|
|
||||||
#define PIGPIOD_IF2_VERSION 16
|
#define PIGPIOD_IF2_VERSION 17
|
||||||
|
|
||||||
/*TEXT
|
/*TEXT
|
||||||
|
|
||||||
|
@ -3352,6 +3352,37 @@ tick 32 bit The number of microseconds since boot
|
||||||
WARNING: this wraps around from
|
WARNING: this wraps around from
|
||||||
4294967295 to 0 roughly every 72 minutes
|
4294967295 to 0 roughly every 72 minutes
|
||||||
. .
|
. .
|
||||||
|
|
||||||
|
The GPIO are sampled at a rate set when the pigpio daemon
|
||||||
|
is started (default 5 us).
|
||||||
|
|
||||||
|
The number of samples per second is given in the following table.
|
||||||
|
|
||||||
|
. .
|
||||||
|
samples
|
||||||
|
per sec
|
||||||
|
|
||||||
|
1 1,000,000
|
||||||
|
2 500,000
|
||||||
|
sample 4 250,000
|
||||||
|
rate 5 200,000
|
||||||
|
(us) 8 125,000
|
||||||
|
10 100,000
|
||||||
|
. .
|
||||||
|
|
||||||
|
GPIO level changes shorter than the sample rate may be missed.
|
||||||
|
|
||||||
|
The daemon software which generates the callbacks is triggered
|
||||||
|
1000 times per second. The callbacks will be called once per
|
||||||
|
level change since the last time they were called.
|
||||||
|
i.e. The callbacks will get all level changes but there will
|
||||||
|
be a latency.
|
||||||
|
|
||||||
|
If you want to track the level of more than one GPIO do so by
|
||||||
|
maintaining the state in the callback. Do not use [*gpio_read*].
|
||||||
|
Remember the event that triggered the callback may have
|
||||||
|
happened several milliseconds before and the GPIO may have
|
||||||
|
changed level many times since then.
|
||||||
D*/
|
D*/
|
||||||
|
|
||||||
/*F*/
|
/*F*/
|
||||||
|
@ -3442,9 +3473,6 @@ The output process is simple. You simply append data to the FIFO
|
||||||
buffer on the chip. This works like a queue, you add data to the
|
buffer on the chip. This works like a queue, you add data to the
|
||||||
queue and the master removes it.
|
queue and the master removes it.
|
||||||
|
|
||||||
This function is not available on the BCM2711 (e.g. as
|
|
||||||
used in the Pi4B).
|
|
||||||
|
|
||||||
I can't get SPI to work properly. I tried with a
|
I can't get SPI to work properly. I tried with a
|
||||||
control word of 0x303 and swapped MISO and MOSI.
|
control word of 0x303 and swapped MISO and MOSI.
|
||||||
|
|
||||||
|
@ -3486,11 +3514,19 @@ less than requested if the FIFO already contained untransmitted data).
|
||||||
Note that the control word sets the BSC mode. The BSC will stay in
|
Note that the control word sets the BSC mode. The BSC will stay in
|
||||||
that mode until a different control word is sent.
|
that mode until a different control word is sent.
|
||||||
|
|
||||||
The BSC peripheral uses GPIO 18 (SDA) and 19 (SCL) in I2C mode
|
GPIO used for models other than those based on the BCM2711.
|
||||||
and GPIO 18 (MOSI), 19 (SCLK), 20 (MISO), and 21 (CE) in SPI mode. You
|
|
||||||
need to swap MISO/MOSI between master and slave.
|
|
||||||
|
|
||||||
When a zero control word is received GPIO 18-21 will be reset
|
@ SDA @ SCL @ MOSI @ SCLK @ MISO @ CE
|
||||||
|
I2C @ 18 @ 19 @ - @ - @ - @ -
|
||||||
|
SPI @ - @ - @ 18 @ 19 @ 20 @ 21
|
||||||
|
|
||||||
|
GPIO used for models based on the BCM2711 (e.g. the Pi4B).
|
||||||
|
|
||||||
|
@ SDA @ SCL @ MOSI @ SCLK @ MISO @ CE
|
||||||
|
I2C @ 10 @ 11 @ - @ - @ - @ -
|
||||||
|
SPI @ - @ - @ 10 @ 11 @ 9 @ 8
|
||||||
|
|
||||||
|
When a zero control word is received the used GPIO will be reset
|
||||||
to INPUT mode.
|
to INPUT mode.
|
||||||
|
|
||||||
control consists of the following bits.
|
control consists of the following bits.
|
||||||
|
@ -3598,8 +3634,7 @@ If there was an error the status will be less than zero
|
||||||
(and will contain the error code).
|
(and will contain the error code).
|
||||||
|
|
||||||
Note that an i2c_address of 0 may be used to close
|
Note that an i2c_address of 0 may be used to close
|
||||||
the BSC device and reassign the used GPIO (18/19)
|
the BSC device and reassign the used GPIO as inputs.
|
||||||
as inputs.
|
|
||||||
D*/
|
D*/
|
||||||
|
|
||||||
/*F*/
|
/*F*/
|
||||||
|
|
34
pigs.1
34
pigs.1
|
@ -925,10 +925,6 @@ The output process is simple. You simply append data to the FIFO
|
||||||
buffer on the chip. This works like a queue, you add data to the
|
buffer on the chip. This works like a queue, you add data to the
|
||||||
queue and the master removes it.
|
queue and the master removes it.
|
||||||
|
|
||||||
.br
|
|
||||||
This function is not available on the BCM2711 (e.g. as
|
|
||||||
used in the Pi4B).
|
|
||||||
|
|
||||||
.br
|
.br
|
||||||
I can't get SPI to work properly. I tried with a
|
I can't get SPI to work properly. I tried with a
|
||||||
control word of 0x303 and swapped MISO and MOSI.
|
control word of 0x303 and swapped MISO and MOSI.
|
||||||
|
@ -950,12 +946,31 @@ For I2C use a control word of (I2C address << 16) + 0x305.
|
||||||
E.g. to talk as I2C slave with address 0x13 use 0x130305.
|
E.g. to talk as I2C slave with address 0x13 use 0x130305.
|
||||||
|
|
||||||
.br
|
.br
|
||||||
The BSC peripheral uses GPIO 18 (SDA) and 19 (SCL) in I2C mode
|
GPIO used for models other than those based on the BCM2711.
|
||||||
and GPIO 18 (MOSI), 19 (SCLK), 20 (MISO), and 21 (CE) in SPI mode. You
|
|
||||||
need to swap MISO/MOSI between master and slave.
|
|
||||||
|
|
||||||
.br
|
.br
|
||||||
When a zero control word is received GPIO 18-21 will be reset
|
|
||||||
|
.EX
|
||||||
|
SDA SCL MOSI SCLK MISO CE
|
||||||
|
I2C 18 19 - - - -
|
||||||
|
SPI - - 18 19 20 21
|
||||||
|
|
||||||
|
.EE
|
||||||
|
|
||||||
|
.br
|
||||||
|
GPIO used for models based on the BCM2711 (e.g. the Pi4B).
|
||||||
|
|
||||||
|
.br
|
||||||
|
|
||||||
|
.EX
|
||||||
|
SDA SCL MOSI SCLK MISO CE
|
||||||
|
I2C 10 11 - - - -
|
||||||
|
SPI - - 10 11 9 8
|
||||||
|
|
||||||
|
.EE
|
||||||
|
|
||||||
|
.br
|
||||||
|
When a zero control word is received the used GPIO will be reset
|
||||||
to INPUT mode.
|
to INPUT mode.
|
||||||
|
|
||||||
.br
|
.br
|
||||||
|
@ -1031,7 +1046,8 @@ TB transmit busy
|
||||||
.EE
|
.EE
|
||||||
|
|
||||||
.br
|
.br
|
||||||
This example assumes that GPIO 2/3 are connected to GPIO 18/19.
|
This example assumes that GPIO 2/3 are connected to GPIO 18/19
|
||||||
|
(GPIO 10/11 on the BCM2711).
|
||||||
|
|
||||||
.br
|
.br
|
||||||
|
|
||||||
|
|
2
setup.py
2
setup.py
|
@ -3,7 +3,7 @@
|
||||||
from distutils.core import setup
|
from distutils.core import setup
|
||||||
|
|
||||||
setup(name='pigpio',
|
setup(name='pigpio',
|
||||||
version='1.45',
|
version='1.46',
|
||||||
author='joan',
|
author='joan',
|
||||||
author_email='joan@abyz.me.uk',
|
author_email='joan@abyz.me.uk',
|
||||||
maintainer='joan',
|
maintainer='joan',
|
||||||
|
|
Loading…
Reference in New Issue