.. _nrfx_prs_sample:
nrfx peripheral resource sharing example
########################################
Overview
********
This sample shows how to use in Zephyr nRF peripherals that share the same ID
and base address. Such peripherals cannot be used simultaneously because they
share certain hardware resources, but it is possible to switch between them and
use one or the other alternately. Because of the current driver model in Zephyr
and the lack of possibility to deinitialize a peripheral that is initialized by
a driver at boot, such switching cannot be achieved with Zephyr APIs. Therefore,
this sample uses the nrfx drivers directly for those peripheral instances that
are to be switched (SPIM2 and UARTE2) while the standard Zephyr drivers are used
for other instances of the same peripheral types (UARTE0 is used by the standard
Zephyr console and SPIM1 is used for performing additional sample transfers).
The sample uses two buttons:
- by pressing Button 1 user can request a transfer to be performed using the
currently initialized peripheral (SPIM2 or UARTE2)
- by pressing Button 2 user can switch between the two peripherals
When no button is pressed, every 5 seconds a background transfer using SPIM1
is performed.
The sample outputs on the standard console the hex codes of all sent and
received bytes, so when the proper loopback wiring is provided on the used
board (between the MOSI and MISO pins for SPIMs and between the TX and RX pins
for the UARTE), it can be checked that what is sent by a given peripheral
is also received back. Without such wiring, no data is received by UARTE and
all zeros are received by SPIMs. Refer to the overlay files provided in the
:zephyr_file:`samples/boards/nrf/nrfx_prs/boards` directory to check which pins
on the boards supported by the sample are assigned as MOSI/MISO and TX/RX pins.
Requirements
************
This sample has been tested on the Nordic Semiconductor nRF9160 DK
(nrf9160dk_nrf9160) and nRF5340 DK (nrf5340dk_nrf5340_cpuapp) boards.
Building and Running
********************
The code can be found in :zephyr_file:`samples/boards/nrf/nrfx_prs`.
To build and flash the application:
.. zephyr-app-commands::
:zephyr-app: samples/boards/nrf/nrfx_prs
:board: nrf9160dk_nrf9160
:goals: build flash
:compact:
Press Button 1 to trigger a sample transfer on SPIM2 or UARTE2.
Press Button 2 to switch the type of peripheral to be used for the transfer.
When no button is pressed, a background transfer on SPIM1 is performed.