.. _module-pw_spi_rp2040:

==============
 pw_spi_rp2040
==============

``pw_spi_rp2040`` implements the ``pw_spi`` interface using the
`Raspberry Pi Pico SDK <https://github.com/raspberrypi/pico-sdk/>`_.

The implementation is based on the SPI driver in pico_sdk. SPI transfers use
the blocking driver API which uses busy waiting under the hood.

.. note::
   There is currently no support for RP2040 hardware CSn
   pins. ~pw::spi::DigitalOutChipSelector~ is used instead.

Usage
=====
.. code-block:: cpp

   #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);
