xref: /nrf52832-nimble/nordic/nrfx/drivers/include/nrfx_twis.h (revision 150812a83cab50279bd772ef6db1bfaf255f2c5b)
1*150812a8SEvalZero /*
2*150812a8SEvalZero  * Copyright (c) 2015 - 2018, Nordic Semiconductor ASA
3*150812a8SEvalZero  * All rights reserved.
4*150812a8SEvalZero  *
5*150812a8SEvalZero  * Redistribution and use in source and binary forms, with or without
6*150812a8SEvalZero  * modification, are permitted provided that the following conditions are met:
7*150812a8SEvalZero  *
8*150812a8SEvalZero  * 1. Redistributions of source code must retain the above copyright notice, this
9*150812a8SEvalZero  *    list of conditions and the following disclaimer.
10*150812a8SEvalZero  *
11*150812a8SEvalZero  * 2. Redistributions in binary form must reproduce the above copyright
12*150812a8SEvalZero  *    notice, this list of conditions and the following disclaimer in the
13*150812a8SEvalZero  *    documentation and/or other materials provided with the distribution.
14*150812a8SEvalZero  *
15*150812a8SEvalZero  * 3. Neither the name of the copyright holder nor the names of its
16*150812a8SEvalZero  *    contributors may be used to endorse or promote products derived from this
17*150812a8SEvalZero  *    software without specific prior written permission.
18*150812a8SEvalZero  *
19*150812a8SEvalZero  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
20*150812a8SEvalZero  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21*150812a8SEvalZero  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
22*150812a8SEvalZero  * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
23*150812a8SEvalZero  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
24*150812a8SEvalZero  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
25*150812a8SEvalZero  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
26*150812a8SEvalZero  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
27*150812a8SEvalZero  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
28*150812a8SEvalZero  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
29*150812a8SEvalZero  * POSSIBILITY OF SUCH DAMAGE.
30*150812a8SEvalZero  */
31*150812a8SEvalZero 
32*150812a8SEvalZero #ifndef NRFX_TWIS_H__
33*150812a8SEvalZero #define NRFX_TWIS_H__
34*150812a8SEvalZero 
35*150812a8SEvalZero #include <nrfx.h>
36*150812a8SEvalZero #include <hal/nrf_twis.h>
37*150812a8SEvalZero #include <hal/nrf_gpio.h>
38*150812a8SEvalZero 
39*150812a8SEvalZero #ifdef __cplusplus
40*150812a8SEvalZero extern "C" {
41*150812a8SEvalZero #endif
42*150812a8SEvalZero 
43*150812a8SEvalZero /**
44*150812a8SEvalZero  * @defgroup nrfx_twis TWIS driver
45*150812a8SEvalZero  * @{
46*150812a8SEvalZero  * @ingroup nrf_twis
47*150812a8SEvalZero  * @brief   Two Wire Slave interface (TWIS) peripheral driver.
48*150812a8SEvalZero  */
49*150812a8SEvalZero 
50*150812a8SEvalZero /**
51*150812a8SEvalZero  * @brief TWIS driver instance data structure.
52*150812a8SEvalZero  */
53*150812a8SEvalZero typedef struct
54*150812a8SEvalZero {
55*150812a8SEvalZero     NRF_TWIS_Type * p_reg;        ///< Pointer to a structure with TWIS registers.
56*150812a8SEvalZero     uint8_t         drv_inst_idx; ///< Driver instance index.
57*150812a8SEvalZero } nrfx_twis_t;
58*150812a8SEvalZero 
59*150812a8SEvalZero enum {
60*150812a8SEvalZero #if NRFX_CHECK(NRFX_TWIS0_ENABLED)
61*150812a8SEvalZero     NRFX_TWIS0_INST_IDX,
62*150812a8SEvalZero #endif
63*150812a8SEvalZero #if NRFX_CHECK(NRFX_TWIS1_ENABLED)
64*150812a8SEvalZero     NRFX_TWIS1_INST_IDX,
65*150812a8SEvalZero #endif
66*150812a8SEvalZero #if NRFX_CHECK(NRFX_TWIS2_ENABLED)
67*150812a8SEvalZero     NRFX_TWIS2_INST_IDX,
68*150812a8SEvalZero #endif
69*150812a8SEvalZero #if NRFX_CHECK(NRFX_TWIS3_ENABLED)
70*150812a8SEvalZero     NRFX_TWIS3_INST_IDX,
71*150812a8SEvalZero #endif
72*150812a8SEvalZero     NRFX_TWIS_ENABLED_COUNT
73*150812a8SEvalZero };
74*150812a8SEvalZero 
75*150812a8SEvalZero /**
76*150812a8SEvalZero  * @brief Macro for creating a TWIS driver instance.
77*150812a8SEvalZero  */
78*150812a8SEvalZero #define NRFX_TWIS_INSTANCE(id)                               \
79*150812a8SEvalZero {                                                            \
80*150812a8SEvalZero     .p_reg        = NRFX_CONCAT_2(NRF_TWIS, id),             \
81*150812a8SEvalZero     .drv_inst_idx = NRFX_CONCAT_3(NRFX_TWIS, id, _INST_IDX), \
82*150812a8SEvalZero }
83*150812a8SEvalZero 
84*150812a8SEvalZero /**
85*150812a8SEvalZero  * @brief Event callback function event definitions.
86*150812a8SEvalZero  */
87*150812a8SEvalZero typedef enum
88*150812a8SEvalZero {
89*150812a8SEvalZero     NRFX_TWIS_EVT_READ_REQ,     ///< Read request detected.
90*150812a8SEvalZero                                 /**< If there is no buffer prepared, buf_req flag in the even will be set.
91*150812a8SEvalZero                                      Call then @ref nrfx_twis_tx_prepare to give parameters for buffer.
92*150812a8SEvalZero                                      */
93*150812a8SEvalZero     NRFX_TWIS_EVT_READ_DONE,    ///< Read request has finished - free any data.
94*150812a8SEvalZero     NRFX_TWIS_EVT_READ_ERROR,   ///< Read request finished with error.
95*150812a8SEvalZero     NRFX_TWIS_EVT_WRITE_REQ,    ///< Write request detected.
96*150812a8SEvalZero                                 /**< If there is no buffer prepared, buf_req flag in the even will be set.
97*150812a8SEvalZero                                      Call then @ref nrfx_twis_rx_prepare to give parameters for buffer.
98*150812a8SEvalZero                                      */
99*150812a8SEvalZero     NRFX_TWIS_EVT_WRITE_DONE,   ///< Write request has finished - process data.
100*150812a8SEvalZero     NRFX_TWIS_EVT_WRITE_ERROR,  ///< Write request finished with error.
101*150812a8SEvalZero     NRFX_TWIS_EVT_GENERAL_ERROR ///< Error that happens not inside WRITE or READ transaction.
102*150812a8SEvalZero } nrfx_twis_evt_type_t;
103*150812a8SEvalZero 
104*150812a8SEvalZero /**
105*150812a8SEvalZero  * @brief Possible error sources.
106*150812a8SEvalZero  *
107*150812a8SEvalZero  * This is flag enum - values from this enum can be connected using logical or operator.
108*150812a8SEvalZero  * @note
109*150812a8SEvalZero  * We could use directly @ref nrf_twis_error_t. Error type enum is redefined here because
110*150812a8SEvalZero  * of possible future extension (eg. supporting timeouts and synchronous mode).
111*150812a8SEvalZero  */
112*150812a8SEvalZero typedef enum
113*150812a8SEvalZero {
114*150812a8SEvalZero     NRFX_TWIS_ERROR_OVERFLOW         = NRF_TWIS_ERROR_OVERFLOW,  /**< RX buffer overflow detected, and prevented. */
115*150812a8SEvalZero     NRFX_TWIS_ERROR_DATA_NACK        = NRF_TWIS_ERROR_DATA_NACK, /**< NACK sent after receiving a data byte. */
116*150812a8SEvalZero     NRFX_TWIS_ERROR_OVERREAD         = NRF_TWIS_ERROR_OVERREAD,  /**< TX buffer over-read detected, and prevented. */
117*150812a8SEvalZero     NRFX_TWIS_ERROR_UNEXPECTED_EVENT = 1 << 8                    /**< Unexpected event detected by state machine. */
118*150812a8SEvalZero } nrfx_twis_error_t;
119*150812a8SEvalZero 
120*150812a8SEvalZero /**
121*150812a8SEvalZero  * @brief TWIS driver event structure.
122*150812a8SEvalZero  */
123*150812a8SEvalZero typedef struct
124*150812a8SEvalZero {
125*150812a8SEvalZero     nrfx_twis_evt_type_t type; ///< Event type.
126*150812a8SEvalZero     union
127*150812a8SEvalZero     {
128*150812a8SEvalZero         bool buf_req;       ///< Flag for @ref NRFX_TWIS_EVT_READ_REQ and @ref NRFX_TWIS_EVT_WRITE_REQ.
129*150812a8SEvalZero                             /**< Information if transmission buffer requires to be prepared. */
130*150812a8SEvalZero         uint32_t tx_amount; ///< Data for @ref NRFX_TWIS_EVT_READ_DONE.
131*150812a8SEvalZero         uint32_t rx_amount; ///< Data for @ref NRFX_TWIS_EVT_WRITE_DONE.
132*150812a8SEvalZero         uint32_t error;     ///< Data for @ref NRFX_TWIS_EVT_GENERAL_ERROR.
133*150812a8SEvalZero     } data;
134*150812a8SEvalZero } nrfx_twis_evt_t;
135*150812a8SEvalZero 
136*150812a8SEvalZero /**
137*150812a8SEvalZero  * @brief TWI slave event callback function type.
138*150812a8SEvalZero  *
139*150812a8SEvalZero  * @param[in] p_event Event information structure.
140*150812a8SEvalZero  */
141*150812a8SEvalZero typedef void (*nrfx_twis_event_handler_t)(nrfx_twis_evt_t const * p_event);
142*150812a8SEvalZero 
143*150812a8SEvalZero /**
144*150812a8SEvalZero  * @brief Structure for TWIS configuration.
145*150812a8SEvalZero  */
146*150812a8SEvalZero typedef struct
147*150812a8SEvalZero {
148*150812a8SEvalZero     uint32_t            addr[2];            //!< Set addresses that this slave should respond. Set 0 to disable.
149*150812a8SEvalZero     uint32_t            scl;                //!< SCL pin number.
150*150812a8SEvalZero     uint32_t            sda;                //!< SDA pin number.
151*150812a8SEvalZero     nrf_gpio_pin_pull_t scl_pull;           //!< SCL pin pull.
152*150812a8SEvalZero     nrf_gpio_pin_pull_t sda_pull;           //!< SDA pin pull.
153*150812a8SEvalZero     uint8_t             interrupt_priority; //!< The priority of interrupt for the module to set.
154*150812a8SEvalZero } nrfx_twis_config_t;
155*150812a8SEvalZero 
156*150812a8SEvalZero /**
157*150812a8SEvalZero  * @brief Generate default configuration for TWIS driver instance.
158*150812a8SEvalZero  */
159*150812a8SEvalZero #define NRFX_TWIS_DEFAULT_CONFIG \
160*150812a8SEvalZero { \
161*150812a8SEvalZero     .addr               = { NRFX_TWIS_DEFAULT_CONFIG_ADDR0,                       \
162*150812a8SEvalZero                             NRFX_TWIS_DEFAULT_CONFIG_ADDR1 },                     \
163*150812a8SEvalZero     .scl                = 31,                                                     \
164*150812a8SEvalZero     .scl_pull           = (nrf_gpio_pin_pull_t)NRFX_TWIS_DEFAULT_CONFIG_SCL_PULL, \
165*150812a8SEvalZero     .sda                = 31,                                                     \
166*150812a8SEvalZero     .sda_pull           = (nrf_gpio_pin_pull_t)NRFX_TWIS_DEFAULT_CONFIG_SDA_PULL, \
167*150812a8SEvalZero     .interrupt_priority = NRFX_TWIS_DEFAULT_CONFIG_IRQ_PRIORITY                   \
168*150812a8SEvalZero }
169*150812a8SEvalZero 
170*150812a8SEvalZero /**
171*150812a8SEvalZero  * @brief Function for initializing the TWIS driver instance.
172*150812a8SEvalZero  *
173*150812a8SEvalZero  * Function initializes and enables TWIS driver.
174*150812a8SEvalZero  * @attention After driver initialization enable it by @ref nrfx_twis_enable.
175*150812a8SEvalZero  *
176*150812a8SEvalZero  * @param[in] p_instance      Pointer to the driver instance structure.
177*150812a8SEvalZero  * @attention                 @em p_instance has to be global object.
178*150812a8SEvalZero  *                            It would be used by interrupts so make it sure that object
179*150812a8SEvalZero  *                            would not be destroyed when function is leaving.
180*150812a8SEvalZero  * @param[in] p_config        Pointer to the structure with initial configuration.
181*150812a8SEvalZero  * @param[in] event_handler   Event handler provided by the user.
182*150812a8SEvalZero  *
183*150812a8SEvalZero  * @retval NRFX_SUCCESS             If initialization was successful.
184*150812a8SEvalZero  * @retval NRFX_ERROR_INVALID_STATE If the driver is already initialized.
185*150812a8SEvalZero  * @retval NRFX_ERROR_BUSY          If some other peripheral with the same
186*150812a8SEvalZero  *                                  instance ID is already in use. This is
187*150812a8SEvalZero  *                                  possible only if NRFX_PRS_ENABLED
188*150812a8SEvalZero  *                                  is set to a value other than zero.
189*150812a8SEvalZero  */
190*150812a8SEvalZero nrfx_err_t nrfx_twis_init(nrfx_twis_t const *        p_instance,
191*150812a8SEvalZero                           nrfx_twis_config_t const * p_config,
192*150812a8SEvalZero                           nrfx_twis_event_handler_t  event_handler);
193*150812a8SEvalZero 
194*150812a8SEvalZero /**
195*150812a8SEvalZero  * @brief Function for uninitializing the TWIS driver instance.
196*150812a8SEvalZero  *
197*150812a8SEvalZero  * Function initializes the peripheral and resets all registers to default values.
198*150812a8SEvalZero  *
199*150812a8SEvalZero  * @param[in] p_instance Pointer to the driver instance structure.
200*150812a8SEvalZero  * @note
201*150812a8SEvalZero  * It is safe to call nrfx_twis_uninit even before initialization.
202*150812a8SEvalZero  * Actually @ref nrfx_twis_init function calls this function to
203*150812a8SEvalZero  * make sure that TWIS state is known.
204*150812a8SEvalZero  * @note
205*150812a8SEvalZero  * If TWIS driver was in uninitialized state before calling this function,
206*150812a8SEvalZero  * selected pins would not be reset to default configuration.
207*150812a8SEvalZero  */
208*150812a8SEvalZero void nrfx_twis_uninit(nrfx_twis_t const * p_instance);
209*150812a8SEvalZero 
210*150812a8SEvalZero /**
211*150812a8SEvalZero  * @brief Enable TWIS instance.
212*150812a8SEvalZero  *
213*150812a8SEvalZero  * This function enables TWIS instance.
214*150812a8SEvalZero  * Function defined if there is needs for dynamically enabling and disabling the peripheral.
215*150812a8SEvalZero  * Use @ref nrfx_twis_enable and @ref nrfx_twis_disable functions.
216*150812a8SEvalZero  * They do not change any configuration registers.
217*150812a8SEvalZero  *
218*150812a8SEvalZero  * @param p_instance Pointer to the driver instance structure.
219*150812a8SEvalZero  */
220*150812a8SEvalZero void nrfx_twis_enable(nrfx_twis_t const * p_instance);
221*150812a8SEvalZero 
222*150812a8SEvalZero /**
223*150812a8SEvalZero  * @brief Disable TWIS instance.
224*150812a8SEvalZero  *
225*150812a8SEvalZero  * Disabling TWIS instance gives possibility to turn off the TWIS while
226*150812a8SEvalZero  * holding configuration done by @ref nrfx_twis_init.
227*150812a8SEvalZero  *
228*150812a8SEvalZero  * @param p_instance Pointer to the driver instance structure.
229*150812a8SEvalZero  */
230*150812a8SEvalZero void nrfx_twis_disable(nrfx_twis_t const * p_instance);
231*150812a8SEvalZero 
232*150812a8SEvalZero /**
233*150812a8SEvalZero  * @brief Get and clear last error flags.
234*150812a8SEvalZero  *
235*150812a8SEvalZero  * Function gets information about errors.
236*150812a8SEvalZero  * This is also the only possibility to exit from error substate of the internal state machine.
237*150812a8SEvalZero  *
238*150812a8SEvalZero  * @param[in] p_instance Pointer to the driver instance structure.
239*150812a8SEvalZero  * @return Error flags defined in @ref nrfx_twis_error_t.
240*150812a8SEvalZero  * @attention
241*150812a8SEvalZero  * This function clears error state and flags.
242*150812a8SEvalZero  */
243*150812a8SEvalZero uint32_t nrfx_twis_error_get_and_clear(nrfx_twis_t const * p_instance);
244*150812a8SEvalZero 
245*150812a8SEvalZero 
246*150812a8SEvalZero /**
247*150812a8SEvalZero  * @brief Prepare data for sending.
248*150812a8SEvalZero  *
249*150812a8SEvalZero  * This function should be used in response for @ref NRFX_TWIS_EVT_READ_REQ event.
250*150812a8SEvalZero  *
251*150812a8SEvalZero  * @note Peripherals using EasyDMA (including TWIS) require the transfer buffers
252*150812a8SEvalZero  *       to be placed in the Data RAM region. If this condition is not met,
253*150812a8SEvalZero  *       this function will fail with the error code NRFX_ERROR_INVALID_ADDR.
254*150812a8SEvalZero  *
255*150812a8SEvalZero  * @param[in] p_instance Pointer to the driver instance structure.
256*150812a8SEvalZero  * @param[in] p_buf      Transmission buffer.
257*150812a8SEvalZero  * @attention            Transmission buffer has to be placed in RAM.
258*150812a8SEvalZero  * @param     size       Maximum number of bytes that master may read from buffer given.
259*150812a8SEvalZero  *
260*150812a8SEvalZero  * @retval NRFX_SUCCESS              Preparation finished properly.
261*150812a8SEvalZero  * @retval NRFX_ERROR_INVALID_ADDR   Given @em p_buf is not placed inside the RAM.
262*150812a8SEvalZero  * @retval NRFX_ERROR_INVALID_LENGTH Wrong value in @em size parameter.
263*150812a8SEvalZero  * @retval NRFX_ERROR_INVALID_STATE  Module not initialized or not enabled.
264*150812a8SEvalZero  */
265*150812a8SEvalZero nrfx_err_t nrfx_twis_tx_prepare(nrfx_twis_t const * p_instance,
266*150812a8SEvalZero                                 void const *        p_buf,
267*150812a8SEvalZero                                 size_t              size);
268*150812a8SEvalZero 
269*150812a8SEvalZero /**
270*150812a8SEvalZero  * @brief Get number of transmitted bytes.
271*150812a8SEvalZero  *
272*150812a8SEvalZero  * Function returns number of bytes sent.
273*150812a8SEvalZero  * This function may be called after @ref NRFX_TWIS_EVT_READ_DONE or @ref NRFX_TWIS_EVT_READ_ERROR events.
274*150812a8SEvalZero  *
275*150812a8SEvalZero  * @param[in] p_instance Pointer to the driver instance structure.
276*150812a8SEvalZero  *
277*150812a8SEvalZero  * @return Number of bytes sent.
278*150812a8SEvalZero  */
279*150812a8SEvalZero __STATIC_INLINE size_t nrfx_twis_tx_amount(nrfx_twis_t const * p_instance);
280*150812a8SEvalZero 
281*150812a8SEvalZero /**
282*150812a8SEvalZero  * @brief Prepare data for receiving
283*150812a8SEvalZero  *
284*150812a8SEvalZero  * This function should be used in response for @ref NRFX_TWIS_EVT_WRITE_REQ event.
285*150812a8SEvalZero  *
286*150812a8SEvalZero  * @note Peripherals using EasyDMA (including TWIS) require the transfer buffers
287*150812a8SEvalZero  *       to be placed in the Data RAM region. If this condition is not met,
288*150812a8SEvalZero  *       this function will fail with the error code NRFX_ERROR_INVALID_ADDR.
289*150812a8SEvalZero  *
290*150812a8SEvalZero  * @param[in] p_instance Pointer to the driver instance structure.
291*150812a8SEvalZero  * @param[in] p_buf      Buffer that would be filled with received data.
292*150812a8SEvalZero  * @attention            Receiving buffer has to be placed in RAM.
293*150812a8SEvalZero  * @param     size       Size of the buffer (maximum amount of data to receive).
294*150812a8SEvalZero  *
295*150812a8SEvalZero  * @retval NRFX_SUCCESS              Preparation finished properly.
296*150812a8SEvalZero  * @retval NRFX_ERROR_INVALID_ADDR   Given @em p_buf is not placed inside the RAM.
297*150812a8SEvalZero  * @retval NRFX_ERROR_INVALID_LENGTH Wrong value in @em size parameter.
298*150812a8SEvalZero  * @retval NRFX_ERROR_INVALID_STATE  Module not initialized or not enabled.
299*150812a8SEvalZero  */
300*150812a8SEvalZero nrfx_err_t nrfx_twis_rx_prepare(nrfx_twis_t const * p_instance,
301*150812a8SEvalZero                                 void *              p_buf,
302*150812a8SEvalZero                                 size_t              size);
303*150812a8SEvalZero 
304*150812a8SEvalZero /**
305*150812a8SEvalZero  * @brief Get number of received bytes.
306*150812a8SEvalZero  *
307*150812a8SEvalZero  * Function returns number of bytes received.
308*150812a8SEvalZero  * This function may be called after @ref NRFX_TWIS_EVT_WRITE_DONE or @ref NRFX_TWIS_EVT_WRITE_ERROR events.
309*150812a8SEvalZero  *
310*150812a8SEvalZero  * @param[in] p_instance Pointer to the driver instance structure.
311*150812a8SEvalZero  *
312*150812a8SEvalZero  * @return Number of bytes received.
313*150812a8SEvalZero  */
314*150812a8SEvalZero __STATIC_INLINE size_t nrfx_twis_rx_amount(nrfx_twis_t const * p_instance);
315*150812a8SEvalZero 
316*150812a8SEvalZero /**
317*150812a8SEvalZero  * @brief Function checks if driver is busy right now.
318*150812a8SEvalZero  *
319*150812a8SEvalZero  * Actual driver substate is tested.
320*150812a8SEvalZero  * If driver is in any other state than IDLE or ERROR this function returns true.
321*150812a8SEvalZero  *
322*150812a8SEvalZero  * @param[in] p_instance Pointer to the driver instance structure.
323*150812a8SEvalZero  *
324*150812a8SEvalZero  * @retval true  Driver is in state other than ERROR or IDLE.
325*150812a8SEvalZero  * @retval false There is no transmission pending.
326*150812a8SEvalZero  */
327*150812a8SEvalZero bool nrfx_twis_is_busy(nrfx_twis_t const * p_instance);
328*150812a8SEvalZero 
329*150812a8SEvalZero /**
330*150812a8SEvalZero  * @brief Function checks if driver is waiting for tx buffer.
331*150812a8SEvalZero  *
332*150812a8SEvalZero  * If this function returns true, it means that driver is stalled expecting
333*150812a8SEvalZero  * of the @ref nrfx_twis_tx_prepare function call.
334*150812a8SEvalZero  *
335*150812a8SEvalZero  * @param[in] p_instance Pointer to the driver instance structure.
336*150812a8SEvalZero  *
337*150812a8SEvalZero  * @retval true  Driver waits for @ref nrfx_twis_tx_prepare.
338*150812a8SEvalZero  * @retval false Driver is not in the state where it waits for preparing tx buffer.
339*150812a8SEvalZero  */
340*150812a8SEvalZero bool nrfx_twis_is_waiting_tx_buff(nrfx_twis_t const * p_instance);
341*150812a8SEvalZero 
342*150812a8SEvalZero /**
343*150812a8SEvalZero  * @brief Function checks if driver is waiting for rx buffer.
344*150812a8SEvalZero  *
345*150812a8SEvalZero  * If this function returns true, it means that driver is staled expecting
346*150812a8SEvalZero  * of the @ref nrfx_twis_rx_prepare function call.
347*150812a8SEvalZero  *
348*150812a8SEvalZero  * @param[in] p_instance Pointer to the driver instance structure.
349*150812a8SEvalZero  *
350*150812a8SEvalZero  * @retval true  Driver waits for @ref nrfx_twis_rx_prepare.
351*150812a8SEvalZero  * @retval false Driver is not in the state where it waits for preparing rx buffer.
352*150812a8SEvalZero  */
353*150812a8SEvalZero bool nrfx_twis_is_waiting_rx_buff(nrfx_twis_t const * p_instance);
354*150812a8SEvalZero 
355*150812a8SEvalZero /**
356*150812a8SEvalZero  * @brief Check if driver is sending data.
357*150812a8SEvalZero  *
358*150812a8SEvalZero  * If this function returns true, it means that there is ongoing output transmission.
359*150812a8SEvalZero  *
360*150812a8SEvalZero  * @param[in] p_instance Pointer to the driver instance structure.
361*150812a8SEvalZero  *
362*150812a8SEvalZero  * @retval true  There is ongoing output transmission.
363*150812a8SEvalZero  * @retval false Driver is in other state.
364*150812a8SEvalZero  */
365*150812a8SEvalZero bool nrfx_twis_is_pending_tx(nrfx_twis_t const * p_instance);
366*150812a8SEvalZero 
367*150812a8SEvalZero /**
368*150812a8SEvalZero  * @brief Check if driver is receiving data.
369*150812a8SEvalZero  *
370*150812a8SEvalZero  * If this function returns true, it means that there is ongoing input transmission.
371*150812a8SEvalZero  *
372*150812a8SEvalZero  * @param[in] p_instance Pointer to the driver instance structure.
373*150812a8SEvalZero  *
374*150812a8SEvalZero  * @retval true  There is ongoing input transmission.
375*150812a8SEvalZero  * @retval false Driver is in other state.
376*150812a8SEvalZero  */
377*150812a8SEvalZero bool nrfx_twis_is_pending_rx(nrfx_twis_t const * p_instance);
378*150812a8SEvalZero 
379*150812a8SEvalZero #ifndef SUPPRESS_INLINE_IMPLEMENTATION
nrfx_twis_tx_amount(nrfx_twis_t const * p_instance)380*150812a8SEvalZero __STATIC_INLINE size_t nrfx_twis_tx_amount(nrfx_twis_t const * p_instance)
381*150812a8SEvalZero {
382*150812a8SEvalZero     return nrf_twis_tx_amount_get(p_instance->p_reg);
383*150812a8SEvalZero }
384*150812a8SEvalZero 
nrfx_twis_rx_amount(nrfx_twis_t const * p_instance)385*150812a8SEvalZero __STATIC_INLINE size_t nrfx_twis_rx_amount(nrfx_twis_t const * p_instance)
386*150812a8SEvalZero {
387*150812a8SEvalZero     return nrf_twis_rx_amount_get(p_instance->p_reg);
388*150812a8SEvalZero }
389*150812a8SEvalZero #endif // SUPPRESS_INLINE_IMPLEMENTATION
390*150812a8SEvalZero 
391*150812a8SEvalZero 
392*150812a8SEvalZero void nrfx_twis_0_irq_handler(void);
393*150812a8SEvalZero void nrfx_twis_1_irq_handler(void);
394*150812a8SEvalZero void nrfx_twis_2_irq_handler(void);
395*150812a8SEvalZero void nrfx_twis_3_irq_handler(void);
396*150812a8SEvalZero 
397*150812a8SEvalZero 
398*150812a8SEvalZero /** @} */
399*150812a8SEvalZero 
400*150812a8SEvalZero #ifdef __cplusplus
401*150812a8SEvalZero }
402*150812a8SEvalZero #endif
403*150812a8SEvalZero 
404*150812a8SEvalZero #endif // NRFX_TWIS_H__
405