pw_spi_rp2040#
Raspberry Pi RP2040 backend for pw_spi
Unstable C++
pw_spi_rp2040
implements the pw_spi interface using the
Raspberry Pi Pico SDK.
The implementation is based on the SPI driver from the Pico SDK. SPI transfers use the blocking driver API which uses busy waiting under the hood.
The PicoSDK’s spi_init()
must be called before using the initiator in order
to enable the SPI peripheral and set its bus speed.
Note
There is currently no support for RP2040 hardware CSn
pins. pw::spi::DigitalOutChipSelector
is
used instead.
Usage#
#include "hardware/spi.h"
#include "pw_digital_io/polarity.h"
#include "pw_digital_io_rp2040/digital_io.h"
#include "pw_spi/chip_selector_digital_out.h"
#include "pw_spi/device.h"
#include "pw_sync/borrow.h"
#include "pw_sync/mutex.h"
constexpr pw::spi::Config kSpiConfig8Bit{
.polarity = pw::spi::ClockPolarity::kActiveHigh,
.phase = pw::spi::ClockPhase::kFallingEdge,
.bits_per_word = pw::spi::BitsPerWord(8),
.bit_order = pw::spi::BitOrder::kMsbFirst,
};
pw::digital_io::Rp2040DigitalInOut display_cs_pin({
.pin = 12,
.polarity = pw::digital_io::Polarity::kActiveLow,
});
DigitalOutChipSelector spi_chip_selector(display_cs_pin);
Rp2040Initiator spi_initiator(spi0);
VirtualMutex spi_initiator_mutex;
Borrowable<Initiator> borrowable_spi_initiator(spi_initiator,
spi_initiator_mutex);
pw::spi::Device spi_8_bit(borrowable_spi_initiator,
kSpiConfig8Bit,
spi_chip_selector);