From 29a855fc3242026c5632e608e4c8da2ab747cff7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Krzysztof=20Chru=C5=9Bci=C5=84ski?= Date: Wed, 2 Jul 2025 08:11:42 +0200 Subject: [PATCH] nrfx: hal: uarte: Add function for setting PTR and MAXCNT MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit There are cases where only PTR or MAXCNT need to be updated and not both. Since register access is costly use dedicated function instead of setting both at once. Signed-off-by: Krzysztof Chruściński --- nrfx/hal/nrf_uarte.h | 82 +++++++++++++++++++++++++++++++++++++++----- 1 file changed, 74 insertions(+), 8 deletions(-) diff --git a/nrfx/hal/nrf_uarte.h b/nrfx/hal/nrf_uarte.h index 08ad02cf..5767d7f5 100644 --- a/nrfx/hal/nrf_uarte.h +++ b/nrfx/hal/nrf_uarte.h @@ -703,6 +703,24 @@ NRF_STATIC_INLINE void nrf_uarte_configure(NRF_UARTE_Type * p_reg, NRF_STATIC_INLINE void nrf_uarte_baudrate_set(NRF_UARTE_Type * p_reg, nrf_uarte_baudrate_t baudrate); +/** + * @brief Function for setting the transmit buffer length. + * + * @param[in] p_reg Pointer to the structure of registers of the peripheral. + * @param[in] length Maximum number of data bytes to receive. + */ +NRF_STATIC_INLINE void nrf_uarte_tx_maxcnt_set(NRF_UARTE_Type * p_reg, + size_t length); + +/** + * @brief Function for setting the transmit buffer pointer. + * + * @param[in] p_reg Pointer to the structure of registers of the peripheral. + * @param[in] p_buffer Pointer to the buffer for received data. + */ +NRF_STATIC_INLINE void nrf_uarte_tx_ptr_set(NRF_UARTE_Type * p_reg, + uint8_t const * p_buffer); + /** * @brief Function for setting the transmit buffer. * @@ -732,6 +750,24 @@ NRF_STATIC_INLINE uint8_t const * nrf_uarte_tx_buffer_get(NRF_UARTE_Type * p_reg */ NRF_STATIC_INLINE uint32_t nrf_uarte_tx_amount_get(NRF_UARTE_Type const * p_reg); +/** + * @brief Function for setting the receive buffer length. + * + * @param[in] p_reg Pointer to the structure of registers of the peripheral. + * @param[in] length Maximum number of data bytes to receive. + */ +NRF_STATIC_INLINE void nrf_uarte_rx_maxcnt_set(NRF_UARTE_Type * p_reg, + size_t length); + +/** + * @brief Function for setting the receive buffer pointer. + * + * @param[in] p_reg Pointer to the structure of registers of the peripheral. + * @param[in] p_buffer Pointer to the buffer for received data. + */ +NRF_STATIC_INLINE void nrf_uarte_rx_ptr_set(NRF_UARTE_Type * p_reg, + uint8_t * p_buffer); + /** * @brief Function for setting the receive buffer. * @@ -1020,19 +1056,34 @@ NRF_STATIC_INLINE void nrf_uarte_baudrate_set(NRF_UARTE_Type * p_reg, nrf_uarte_ p_reg->BAUDRATE = baudrate; } -NRF_STATIC_INLINE void nrf_uarte_tx_buffer_set(NRF_UARTE_Type * p_reg, - uint8_t const * p_buffer, +NRF_STATIC_INLINE void nrf_uarte_tx_maxcnt_set(NRF_UARTE_Type * p_reg, size_t length) { #if NRF_UARTE_HAS_DMA_REG - p_reg->DMA.TX.PTR = (uint32_t)p_buffer; p_reg->DMA.TX.MAXCNT = length; #else - p_reg->TXD.PTR = (uint32_t)p_buffer; p_reg->TXD.MAXCNT = length; #endif } +NRF_STATIC_INLINE void nrf_uarte_tx_ptr_set(NRF_UARTE_Type * p_reg, + uint8_t const * p_buffer) +{ +#if NRF_UARTE_HAS_DMA_REG + p_reg->DMA.TX.PTR = (uint32_t)p_buffer; +#else + p_reg->TXD.PTR = (uint32_t)p_buffer; +#endif +} + +NRF_STATIC_INLINE void nrf_uarte_tx_buffer_set(NRF_UARTE_Type * p_reg, + uint8_t const * p_buffer, + size_t length) +{ + nrf_uarte_tx_ptr_set(p_reg, p_buffer); + nrf_uarte_tx_maxcnt_set(p_reg, length); +} + NRF_STATIC_INLINE uint8_t const * nrf_uarte_tx_buffer_get(NRF_UARTE_Type * p_reg) { #if NRF_UARTE_HAS_DMA_REG @@ -1051,19 +1102,34 @@ NRF_STATIC_INLINE uint32_t nrf_uarte_tx_amount_get(NRF_UARTE_Type const * p_reg) #endif } -NRF_STATIC_INLINE void nrf_uarte_rx_buffer_set(NRF_UARTE_Type * p_reg, - uint8_t * p_buffer, +NRF_STATIC_INLINE void nrf_uarte_rx_maxcnt_set(NRF_UARTE_Type * p_reg, size_t length) { #if NRF_UARTE_HAS_DMA_REG - p_reg->DMA.RX.PTR = (uint32_t)p_buffer; p_reg->DMA.RX.MAXCNT = length; #else - p_reg->RXD.PTR = (uint32_t)p_buffer; p_reg->RXD.MAXCNT = length; #endif } +NRF_STATIC_INLINE void nrf_uarte_rx_ptr_set(NRF_UARTE_Type * p_reg, + uint8_t * p_buffer) +{ +#if NRF_UARTE_HAS_DMA_REG + p_reg->DMA.RX.PTR = (uint32_t)p_buffer; +#else + p_reg->RXD.PTR = (uint32_t)p_buffer; +#endif +} + +NRF_STATIC_INLINE void nrf_uarte_rx_buffer_set(NRF_UARTE_Type * p_reg, + uint8_t * p_buffer, + size_t length) +{ + nrf_uarte_rx_ptr_set(p_reg, p_buffer); + nrf_uarte_rx_maxcnt_set(p_reg, length); +} + NRF_STATIC_INLINE uint8_t * nrf_uarte_rx_buffer_get(NRF_UARTE_Type * p_reg) { #if NRF_UARTE_HAS_DMA_REG